[{"slug":"billomat","name":"Billomat Invoicing","description":"Manage invoices, clients, articles, and accounting with Billomat. German online invoicing and bookkeeping platform for freelancers and SMBs.","region":"de","category":"finance","icon":"billomat","docsUrl":"https://www.billomat.com/en/api/","requiredEnvVars":["BILLOMAT_SUBDOMAIN","BILLOMAT_API_KEY"],"toolCount":6,"authType":"API_KEY"},{"slug":"bundesbank","name":"Deutsche Bundesbank Statistics","description":"Access macroeconomic data, exchange rates, interest rates, and financial statistics from the Deutsche Bundesbank via the SDMX REST API.","region":"de","category":"finance","icon":"bundesbank","docsUrl":"https://api.statistiken.bundesbank.de/doc/index.html","requiredEnvVars":[],"toolCount":4,"authType":"NONE"},{"slug":"datev","name":"DATEV Accounting","description":"Connect to DATEV accounting systems via the official DATEV Online APIs. Access accounting documents, clients, payroll data, and HR reporting. Used by nearly every German tax consultant.","region":"de","category":"accounting","icon":"datev","docsUrl":"https://developer.datev.de/en/products","requiredEnvVars":["DATEV_CLIENT_ID","DATEV_CLIENT_SECRET","DATEV_TOKEN_URL","DATEV_AUTH_URL"],"toolCount":4,"authType":"OAUTH2"},{"slug":"destatis-genesis","name":"Destatis GENESIS Statistics","description":"Access official German federal statistics from Destatis (Statistisches Bundesamt) via the GENESIS API. Population, economy, trade, labor market, prices, and more.","region":"de","category":"government","icon":"destatis","docsUrl":"https://www-genesis.destatis.de/genesis/misc/GENESIS-Webservices_Einfuehrung.pdf","requiredEnvVars":["DESTATIS_USERNAME","DESTATIS_PASSWORD"],"toolCount":4,"authType":"QUERY_AUTH"},{"slug":"deutsche-bahn","name":"Deutsche Bahn Fahrplan","description":"Query the Deutsche Bahn (DB) timetable via the community-maintained v6.db.transport.rest proxy over the official HAFAS API. Search stations, look up departures/arrivals in real time, and plan journeys between any two DB stops.","instructions":"This connector uses https://v6.db.transport.rest — a free, no-auth wrapper around Deutsche Bahn's HAFAS endpoints maintained by the public-transport community.\n\n**No authentication required**, but the service is hosted best-effort — for production use you may want to self-host (see https://github.com/derhuerst/db-rest).\n\n**Typical workflow**:\n1. Resolve a station name to a stop `id` with `db_search_locations`\n2. Call `db_get_departures` or `db_get_arrivals` with that id\n3. For trip planning, use `db_get_journeys` with `from` and `to` stop ids\n\n**Time format**: All times are ISO 8601 with timezone (e.g. `2026-04-21T08:30+02:00`). If omitted, `when` defaults to now.\n\n**Delay tracking**: departure/arrival entries include `delay` in seconds, `cancelled`, and `platform` vs `plannedPlatform` for live monitoring.\n\n**Multi-modal**: results can include S-Bahn, U-Bahn, bus, tram where operated by DB or partner agencies.","region":"de","category":"transport","icon":"db","docsUrl":"https://v6.db.transport.rest/","requiredEnvVars":[],"toolCount":5,"authType":"NONE"},{"slug":"dhl-tracking","name":"DHL Shipment Tracking","description":"Track DHL shipments worldwide using the official DHL Unified Tracking API. Get real-time shipment status, delivery events, and estimated delivery dates.","region":"de","category":"logistics","icon":"dhl","docsUrl":"https://developer.dhl.com/api-reference/shipment-tracking","requiredEnvVars":["DHL_API_KEY"],"toolCount":2,"authType":"API_KEY"},{"slug":"dpd-germany","name":"DPD Germany Tracking","description":"Track DPD (Dynamic Parcel Distribution) shipments in Germany using the public Parcel Life Cycle REST API. Retrieves full event history, current status, sender/recipient, scan-point locations, and predicted delivery time for any DPD parcel.","instructions":"This connector uses DPD's public Parcel Life Cycle (PLC) REST endpoint — free and without authentication.\n\n**Parcel number format**: 14-digit numeric string (e.g. '01234567890123'). DPD also supports partial matches — the API will return the best match.\n\n**Supported languages**: `de_DE` (German), `en_DE` (English), `fr_FR`, `it_IT`, `es_ES`, `pl_PL`, `cs_CZ`, `nl_NL`. Pass without country code (e.g. 'en') and the API maps to country defaults.\n\n**Events returned**: each event has a timestamp, scan-point (depot/city), status code, and localized description — cover the full parcel journey from pickup through sorting to delivery.\n\n**Limitations**: the public endpoint rate-limits aggressive polling. For large-scale tracking integrations, DPD offers a contract-based SOAP API (WebConnect) — not covered by this adapter.","region":"de","category":"logistics","icon":"dpd","docsUrl":"https://www.dpd.com/de/de/hilfe-service/entwickler-api/","requiredEnvVars":[],"toolCount":1,"authType":"NONE"},{"slug":"fastbill","name":"FastBill Invoicing","description":"Manage invoices, customers, expenses, and revenue with FastBill. Popular invoicing and bookkeeping tool for German freelancers and small businesses.","region":"de","category":"finance","icon":"fastbill","docsUrl":"https://apidocs.fastbill.com/fastbill/","requiredEnvVars":["FASTBILL_EMAIL","FASTBILL_API_KEY"],"toolCount":5,"authType":"BASIC_AUTH"},{"slug":"gls-tracking","name":"GLS Track & Trace","description":"Track GLS (General Logistics Systems) parcels across Europe using the free public Track & Trace REST API. Look up parcels by GLS tracking number (TrackID) or customer reference.","instructions":"This connector uses the GLS public Track & Trace REST endpoint — free, no authentication.\n\n**Tracking number (TrackID)**: 10-12 digit numeric string printed on the parcel label.\n\n**Customer reference**: the reference you (or the shipper) set when creating the parcel. Multiple parcels may share a reference, so results are always an array.\n\n**Language**: `de` (German), `en` (English), `fr`, `it`, `es`, `nl`, `pl`, `cz`. The descriptions in event rows are translated accordingly.\n\n**Country scope**: use `country` (ISO 2-letter like DE, AT, CH, FR) to scope lookup to GLS country organisation. 'EU' covers cross-border.\n\n**Shipping / label generation**: this adapter only covers tracking. Shipment creation requires the GLS ShipIT API with contract-based credentials and is not included here.","region":"eu","category":"logistics","icon":"gls","docsUrl":"https://www.gls-pakete.de/unternehmen/entwickler","requiredEnvVars":[],"toolCount":2,"authType":"NONE"},{"slug":"handelsregister","name":"Handelsregister (handelsregister.ai)","description":"Access the German commercial register (Handelsregister) data via handelsregister.ai — search companies by name, retrieve official entries, current/historical addresses, shareholders, managing directors, and corporate structure.","instructions":"This connector uses the handelsregister.ai REST API which wraps the official Handelsregister portal and enriches it with structured data.\n\n**Authentication**: API key via Authorization header. Generate a key at https://handelsregister.ai/account.\n\n**Typical workflow**:\n1. `hr_search_companies` — find a company by name or keyword\n2. `hr_get_company` — fetch the full record by `company_id` returned from search\n3. `hr_get_documents` — list SHD/AD/HRA documents attached to a company\n\n**Registernummer format**: Courts + numbers like 'HRB 12345 München'. Search also accepts plain company names.\n\n**Costs**: handelsregister.ai bills per lookup, not per search. Searches are typically free; fetching full company records or documents consumes credits.","region":"de","category":"government","icon":"handelsregister","docsUrl":"https://handelsregister.ai/docs","requiredEnvVars":["HANDELSREGISTER_API_KEY"],"toolCount":4,"authType":"API_KEY"},{"slug":"here-geocoding","name":"HERE Geocoding & Search","description":"Geocode addresses, reverse-geocode coordinates, autocomplete addresses as-you-type, and search places via the HERE Location Services API. Useful for address validation, delivery-route planning, and storefront locators. Free tier covers 250k requests/month.","instructions":"This connector uses the HERE Geocoding & Search v7 REST API.\n\n**Credentials**: generate a REST API key at https://platform.here.com → Projects → API Keys. Paste it into `HERE_API_KEY` when importing. The key is passed as a query parameter (`apiKey`), not as a header.\n\n**Pricing**: HERE's Freemium plan includes 250,000 requests/month free. Bulk batch geocoding requires a paid plan.\n\n**Countries**: worldwide coverage. Use `in=countryCode:DEU` or ISO 3-letter country filter for scope.\n\n**Addressing strategies**:\n- `/geocode` — full forward geocoding (structured or unstructured input)\n- `/autocomplete` — very fast address autocomplete, returns short snippets\n- `/autosuggest` — richer suggestions including POIs, chains, addresses\n- `/revgeocode` — coordinates → address\n- `/discover` — place search with categories, brands, opening hours\n\n**Languages**: add `lang=de` or any BCP-47 tag to localise labels.\n\n**In Germany / Baustoff use-case**: use `in=countryCode:DEU&lang=de` to force German labels on addresses for consistency with ERP records.","region":"global","category":"mapping","icon":"here","docsUrl":"https://www.here.com/docs/bundle/geocoding-and-search-api-developer-guide/page/README.html","requiredEnvVars":["HERE_API_KEY"],"toolCount":5,"authType":"QUERY_AUTH"},{"slug":"hrworks","name":"HR WORKS","description":"Access HR WORKS, the German HR/payroll platform: employees, absences, sick leaves, remote work (home office), working times, projects, applicants, organization units, holidays and cost centers via the v2 REST API.","instructions":"This connector uses the HR WORKS v2 REST API (https://developers.hrworks.de).\n\n**Authentication model — IMPORTANT**: HR WORKS does not use a long-lived API key. Instead, you POST `{accessKey, secretAccessKey}` to `/v2/authentication` and receive a short-lived JWT (valid 15 minutes) which is then sent as `Authorization: Bearer <token>` on every subsequent call. This adapter stores a single bearer token (`HRWORKS_TOKEN`) supplied by you.\n\n**Getting a token** (run before importing the connector, then again whenever the token expires):\n\n```bash\ncurl -X POST https://api.hrworks.de/v2/authentication \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"accessKey\":\"YOUR_ACCESS_KEY\",\"secretAccessKey\":\"YOUR_SECRET_ACCESS_KEY\"}'\n```\n\nThe response contains `{\"token\": \"eyJ...\"}` — paste that JWT as `HRWORKS_TOKEN` when importing.\n\n**Token lifetime**: ~15 minutes. After expiration the API will reject calls with 401; you must mint a new token and re-import or update the connector. For long-running workflows, consider wrapping this adapter in a custom proxy that refreshes tokens automatically.\n\n**Sandbox**: HR WORKS provides a demo environment at `https://api.demo-hrworks.de`. Set `HRWORKS_BASE_URL=https://api.demo-hrworks.de` to test against demo data; otherwise the production endpoint `https://api.hrworks.de` is used.\n\n**Identifiers**: most person-related endpoints accept either the HR WORKS personnel number or the HR WORKS username. Use the optional `personIdentifierType` / `usePersonnelNumbers` parameters when the identifier you have on hand is not the default.\n\n**Date intervals**: most listing endpoints (absences, sick leaves, working times, remote work) require ISO `YYYY-MM-DD` `beginDate`/`endDate` — maximum span is one year (or 31 days if `interval=days`).\n\n**Pagination**: page size is 50; the API returns a `Link` header with next/prev URLs. Pass `page` to step through results.\n\n**Rate limit**: HR WORKS imposes per-tenant rate limits — see their developer portal for details.","region":"de","category":"hr","icon":"hrworks","docsUrl":"https://developers.hrworks.de","requiredEnvVars":["HRWORKS_TOKEN"],"toolCount":31,"authType":"BEARER_TOKEN"},{"slug":"immobilienscout24","name":"ImmobilienScout24 API","description":"Search and manage real estate listings on ImmobilienScout24, Germany's largest property portal. Browse apartments, houses, and commercial properties.","region":"de","category":"real-estate","icon":"immobilienscout24","docsUrl":"https://api.immobilienscout24.de/our-apis.html","requiredEnvVars":["IS24_CLIENT_ID","IS24_CLIENT_SECRET"],"toolCount":3,"authType":"OAUTH2"},{"slug":"kenjo","name":"Kenjo HR","description":"Access Kenjo HR data including employees, absences, time tracking, departments, and recruiting. German HR software for manufacturing, services, and retail companies.","region":"de","category":"hr","icon":"kenjo","docsUrl":"https://kenjo.readme.io/reference","requiredEnvVars":["KENJO_API_KEY"],"toolCount":6,"authType":"BEARER_TOKEN"},{"slug":"mfr-fieldservice","name":"MFR Mobile Field Report","description":"Manage field service operations with Mobile Field Report (MFR). Access service requests, appointments, companies, contacts, technicians, service objects, products, documents, time tracking, invoices, checklists, items, tags, qualifications, cost centers, and reports via OData API.","instructions":"This connector uses the MFR OData v3 REST API. Key conventions:\n\n**Date format**: Use `datetime'YYYY-MM-DDTHH:mm:ssZ'` for all date filters (e.g. `DateModified gt datetime'2025-01-01T00:00:00Z'`).\n\n**ID format**: Entity IDs are numeric. When used in URL paths, append an 'L' suffix (e.g. `/ServiceRequests(11164418048L)`). The tools handle this automatically.\n\n**OData filtering**: All list endpoints support `$filter`, `$orderby`, `$top`, `$skip`, `$select`, and `$expand`. Combine filters with `and`/`or`. Operators: `eq`, `ne`, `gt`, `ge`, `lt`, `le`.\n\n**Common entity states**:\n- ServiceRequest: ReadyForScheduling, Scheduled, InProgress, Released, Closed\n- Appointment: NotVisited, InProgress, IsWorkDone, Rejected\n- Invoice: eIsDraft, eIsPaid, eIsSent, eIsOverdue\n\n**Pagination**: Use `$top` (max 100) and `$skip` for pagination. Default is 20 results.\n\n**Expanding relations**: Use `$expand` to include related entities in a single request (e.g. `$expand=Appointments,Customer,Tags`). This avoids N+1 queries.\n\n**Workflow**: A typical field service flow is: Create ServiceRequest → Create Appointment(s) → Assign technician → Track time → Complete steps → Generate report → Create invoice.","region":"de","category":"field-service","icon":"mfr","docsUrl":"https://portal.mobilefieldreport.com/","requiredEnvVars":["MFR_USERNAME","MFR_PASSWORD"],"toolCount":71,"authType":"BASIC_AUTH"},{"slug":"n26-openbanking","name":"N26 Open Banking (PSD2)","description":"Access N26 bank account data via the PSD2 Open Banking API. View account balances, transactions, and account details with proper authorization.","region":"de","category":"banking","icon":"n26","docsUrl":"https://docs.tech26.de/","requiredEnvVars":["N26_CLIENT_ID","N26_CLIENT_SECRET"],"toolCount":3,"authType":"OAUTH2"},{"slug":"nina-warnung","name":"NINA Emergency Warnings","description":"Access official German emergency warnings and alerts from the NINA Warn-App (BBK). Get current warnings for floods, storms, fires, and other emergencies by region.","region":"de","category":"government","icon":"nina","docsUrl":"https://nina.api.bund.dev/","requiredEnvVars":[],"toolCount":4,"authType":"NONE"},{"slug":"openplz","name":"OpenPLZ Germany","description":"Look up German postal codes, localities, and streets via the OpenPLZ API. Free, no authentication, based on the official Bundesanstalt für Kartographie und Geodäsie (BKG) datasets.","instructions":"This connector wraps the free OpenPLZ API for German administrative structure lookups. Useful for address validation, form autocomplete, and regional analytics.\n\n**Hierarchy**: Germany → Federal state (Bundesland) → District (Kreis) → Municipality (Gemeinde) → Locality (Ort) + postal code (PLZ).\n\n**No authentication required**. OpenPLZ is rate-limited (soft limit ~10 req/s) — for bulk work consider self-hosting.\n\n**Common flows**:\n- Postal code → localities: `openplz_lookup_postalcode`\n- City + street autocomplete: `openplz_search_streets`\n- Full town info by AGS (Amtlicher Gemeindeschlüssel): `openplz_get_locality`","region":"de","category":"government","icon":"openplz","docsUrl":"https://www.openplzapi.org/de/","requiredEnvVars":[],"toolCount":5,"authType":"NONE"},{"slug":"oxomi","name":"Oxomi Catalog & Media Portal","description":"Search digital catalogs (Kataloge), product datasheets, technical drawings, safety data sheets, and media assets via Oxomi — the dominant catalog/media portal for the German Baustoff (building materials) trade. Use for product lookup, document download, and cross-selling research across thousands of supplier catalogs.","instructions":"This connector talks to the Oxomi Portal JSON API.\n\n**Credentials**: every request needs three values, automatically injected from the credentials you enter when creating the connector:\n- `OXOMI_PORTAL_ID` — your portal numeric id (find it in Oxomi → Portal-Einstellungen → ID)\n- `OXOMI_USER` — your portal user name (often an email)\n- `OXOMI_ACCESS_TOKEN` — long-lived API token generated under Portal-Einstellungen → API\n\n**Workflow patterns**:\n- Catalog browse: `oxomi_search_catalogs` → `oxomi_get_catalog_pages` → `oxomi_get_catalog_attachments`\n- Product lookup: `oxomi_search_products` (by SKU or text) → returns supplier, catalog reference, datasheet URLs\n- Document hunting: `oxomi_search_documents` for safety data sheets (Sicherheitsdatenblätter), installation guides (Verarbeitungsanleitungen), CAD drawings\n\n**Suppliers**: results are scoped to the portal — you only see suppliers your Oxomi subscription includes (portals typically include hundreds of Baustoff manufacturers like Knauf, Saint-Gobain, Bosch, Würth, etc.).\n\n**Pagination**: list endpoints accept `page` (1-based) and `pageSize` (default 25, max 100).\n\n**Languages**: most descriptions are German; pass `lang=en` for English where the supplier provides translations.","region":"de","category":"wholesale","icon":"oxomi","docsUrl":"https://oxomi.com/portal/","requiredEnvVars":["OXOMI_PORTAL_ID","OXOMI_USER","OXOMI_ACCESS_TOKEN"],"toolCount":7,"authType":"QUERY_AUTH"},{"slug":"payone","name":"PAYONE Payments","description":"Process and manage e-commerce payments via the PAYONE API. Create transactions, check payment status, capture and refund payments.","region":"de","category":"finance","icon":"payone","docsUrl":"https://docs.payone.com/","requiredEnvVars":["PAYONE_MERCHANT_ID","PAYONE_API_KEY","PAYONE_PORTAL_ID","PAYONE_ACCOUNT_ID"],"toolCount":4,"authType":"API_KEY"},{"slug":"personio","name":"Personio HR","description":"Access employee records, attendances, absences, and time-offs via the Personio REST API. Personio is the dominant HR platform for DACH SMBs.","instructions":"This connector uses the Personio v1 REST API.\n\n**Authentication model — IMPORTANT**: Personio's /auth endpoint is not a standard OAuth2 flow. You POST {client_id, client_secret} once and get back a short-lived bearer token, which is then passed as `Authorization: Bearer <token>` on every request. Each successful API response ALSO returns a new token in its Authorization response header that must be used for the next call — effectively a token-rotation scheme. This adapter uses a single long-lived bearer token supplied by you (`PERSONIO_TOKEN`).\n\n**Getting a token**: in Personio admin → Settings → Integrations → API credentials, create a new set, then exchange them for a token via `curl -X POST https://api.personio.de/v1/auth -d 'client_id=...&client_secret=...'`. Paste the returned `token` as `PERSONIO_TOKEN` when importing the connector.\n\n**Token rotation limitation**: because the adapter sends the SAME token on each call, the first call succeeds but subsequent ones may fail once Personio starts rotating. In practice Personio tolerates the same token for a few minutes — good enough for ad-hoc AI workflows but not high-volume integrations. For production, generate a fresh token per session or wrap this adapter in a custom proxy.\n\n**Scopes**: the token inherits the API credential's configured scopes (Employees, Attendances, Absences, Time Offs). Configure these in Personio before generating the token.\n\n**Rate limit**: 10 requests/second per API credential.","region":"de","category":"hr","icon":"personio","docsUrl":"https://developer.personio.de/reference","requiredEnvVars":["PERSONIO_TOKEN"],"toolCount":5,"authType":"BEARER_TOKEN"},{"slug":"planradar","name":"PlanRadar","description":"Manage construction and real estate projects with PlanRadar. Access projects, tickets (defects/tasks), users, documents, and schedules via REST API. Ideal for quality management, defect tracking, inspections, and field reporting in the Bau sector.","instructions":"This connector uses the PlanRadar REST API v1. Key conventions:\n\n**Authentication**: Uses API Key via the `X-PlanRadar-API-Key` header. Generate a Personal Access Token from PlanRadar Settings > API Access.\n\n**Base URL structure**: All endpoints are scoped to a customer: `/api/v1/{customer_id}/...`. The customer_id is set via the PLANRADAR_CUSTOMER_ID environment variable.\n\n**Response format**: Responses follow the JSON:API specification. Data is wrapped in a `data` object (or array) with `id`, `type`, and `attributes` fields. Example: `{ \"data\": { \"id\": \"123\", \"type\": \"projects\", \"attributes\": { \"name\": \"My Project\" } } }`.\n\n**Request format**: The API accepts form-encoded request bodies for POST/PUT operations.\n\n**Rate limiting**: Maximum 30 requests per minute. Exceeding this disables your token for 5 minutes.\n\n**Pagination**: Use `page` and `per_page` query parameters. Default page size varies by endpoint.\n\n**Ticket predefined fields**: Title (mandatory), Assignee, Receiver (CC), Due date, Status, Priority, Progress, Parent Ticket, Layer. Only Title is required for creation.\n\n**Ticket statuses**: Open, In Progress, Resolved, Feedback, Closed, Rejected.\n\n**Custom fields**: Tickets support project-specific custom fields of types: Date, Time, List, Text, Number, Decimal, Checkbox. Custom field values are returned in ticket attributes.\n\n**Layers**: Every ticket must be associated with a layer (floor plan/drawing). When creating tickets, specify the layer_id.\n\n**Project attributes**: id, name, homepage, country, projectnumber, description, city, zipcode, street, author-id.\n\n**API versions**: PlanRadar is migrating to v2. This adapter uses v1 which is stable and fully supported.\n\n**Workflow**: Typical flow is: List projects → Select project → List layers → Create/list tickets (on a layer) → Assign users → Set status/priority/progress → Manage documents → Generate reports.","region":"de","category":"construction","icon":"planradar","docsUrl":"https://help.planradar.com/hc/en-gb/articles/15480453097373-Open-API-Overview","requiredEnvVars":["PLANRADAR_API_KEY","PLANRADAR_CUSTOMER_ID"],"toolCount":10,"authType":"API_KEY"},{"slug":"scopevisio","name":"ScopeVisio Cloud ERP","description":"Access ScopeVisio cloud ERP and CRM data including contacts, invoices, projects, and accounting. German cloud business software for SMBs.","region":"de","category":"erp","icon":"scopevisio","docsUrl":"https://appload.scopevisio.com/static/swagger/index.html","requiredEnvVars":["SCOPEVISIO_BEARER_TOKEN"],"toolCount":6,"authType":"BEARER_TOKEN"},{"slug":"sendcloud","name":"Sendcloud Multi-Carrier Shipping","description":"Create parcels, print labels, track shipments, and manage returns across major EU carriers (DHL, DPD, UPS, PostNL, Hermes, Colissimo, Bpost and 40+ more) through Sendcloud — the largest multi-carrier shipping platform in EU.","instructions":"This connector uses the Sendcloud v2 REST API.\n\n**Credentials** (two values, Basic auth): generate an API key pair at https://panel.sendcloud.sc/#/settings/integrations → 'Sendcloud API'. Paste the public key into `SENDCLOUD_PUBLIC_KEY` and the secret into `SENDCLOUD_SECRET_KEY` when importing.\n\n**Carriers covered**: DHL, DPD, UPS, PostNL, Hermes, Colissimo, Bpost, GLS, Chronopost, Mondial Relay, and 40+ more across EU. Use `sendcloud_list_shipping_methods` to get IDs and pricing per carrier.\n\n**Typical flow**:\n1. `sendcloud_list_shipping_methods` → pick a `shipping_method_id`\n2. `sendcloud_create_parcel` with `request_label: true` → returns parcel id + label URL + tracking number\n3. `sendcloud_get_parcel` → check current status (polled from carrier)\n\n**Test mode**: set `request_label: false` on create_parcel to get a price quote without generating a label (no billing).\n\n**Returns portal**: Sendcloud also provides a branded returns portal — configuration is done in the dashboard, not via this adapter.","region":"eu","category":"logistics","icon":"sendcloud","docsUrl":"https://api.sendcloud.dev/docs/sendcloud-public-api/","requiredEnvVars":["SENDCLOUD_PUBLIC_KEY","SENDCLOUD_SECRET_KEY"],"toolCount":5,"authType":"BASIC_AUTH"},{"slug":"shipcloud","name":"Shipcloud Multi-Carrier Shipping","description":"Create shipments, generate labels, and track parcels across all major German and European carriers (DHL, DPD, GLS, Hermes, UPS, FedEx, TNT) through Shipcloud — the leading multi-carrier shipping aggregator for DE.","instructions":"This connector uses the Shipcloud v1 REST API.\n\n**Credentials**: a single API key (Basic auth username, empty password). Generate one at https://app.shipcloud.io/account under API-Keys. Paste it into `SHIPCLOUD_API_KEY` when importing.\n\n**Carriers covered**: dhl, dhl_express, dpd, gls, hermes, ups, fedex, tnt, go, deutsche_post, iloxx, parcelone, skynet, liefery. Use `shipcloud_list_carriers` to retrieve IDs and available service products.\n\n**Label creation**: `shipcloud_create_shipment` returns a downloadable label URL plus a carrier_tracking_no and a shipcloud tracking_url. Labels are PDF by default.\n\n**Tracking**: parcels shipped through Shipcloud are auto-tracked — use `shipcloud_get_shipment` with the shipcloud id to read status. For external parcels (not shipped via Shipcloud), create a tracking object with `shipcloud_create_tracker`.\n\n**Webhooks**: Shipcloud also supports webhooks for real-time status updates (configure in the dashboard, not via this adapter).\n\n**Test mode**: set `create_shipping_label: false` when calling create_shipment to get a quote without actually creating a real label (and without being billed).","region":"de","category":"logistics","icon":"shipcloud","docsUrl":"https://developers.shipcloud.io/","requiredEnvVars":["SHIPCLOUD_API_KEY"],"toolCount":6,"authType":"BASIC_AUTH"},{"slug":"shopware-6","name":"Shopware 6 Store API","description":"Query a Shopware 6 storefront programmatically — product catalog, categories, cross-sells, landing pages, and search. Covers the public-facing Store API, which is how the Shopware storefront itself talks to the backend.","instructions":"This connector uses the Shopware 6 Store API (not the Admin API).\n\n**Instance URL**: every Shopware install has its own URL. Paste it into `SHOPWARE_URL` when importing — e.g. `https://shop.koch-freiburg.de`. Do NOT add `/store-api`; the adapter handles that.\n\n**Access key**: the Store API authenticates with a single header `sw-access-key`. Find it in the Shopware admin under Settings → System → Integrations → 'Access key for sales channels', or per-sales-channel under Sales Channels → 'API access → Access key'. Set it as `SHOPWARE_ACCESS_KEY` at import time.\n\n**Context token (optional)**: for cart/wishlist operations you also need a `sw-context-token` (obtained from POST /context) — not handled by this adapter. For public catalog browsing no context is required.\n\n**Store API vs Admin API**: Store API is optimised for customer-facing reads and is always active. For administrative writes (create products, manage stock, order fulfilment) use the Admin API, which requires OAuth2 client_credentials and is not covered by this adapter.\n\n**Search**: the search endpoint supports Shopware's criteria grammar (associations, filter, sort, pagination) — see https://developer.shopware.com/docs/concepts/search-queries.html","region":"de","category":"ecommerce","icon":"shopware","docsUrl":"https://developer.shopware.com/docs/guides/integrations-api/store-api-guide","requiredEnvVars":["SHOPWARE_URL","SHOPWARE_ACCESS_KEY"],"toolCount":6,"authType":"API_KEY"},{"slug":"teamviewer","name":"TeamViewer API","description":"Manage TeamViewer devices, contacts, and sessions via the TeamViewer Web API. List devices, check online status, create remote support sessions.","region":"de","category":"remote","icon":"teamviewer","docsUrl":"https://www.teamviewer.com/en/for-developers/","requiredEnvVars":["TEAMVIEWER_API_TOKEN"],"toolCount":6,"authType":"BEARER_TOKEN"},{"slug":"vies-vat","name":"VIES VAT Validation","description":"Validate EU VAT numbers via the European Commission VIES (VAT Information Exchange System) REST API. Confirms that a VAT number is registered for intra-Community trade and returns the trader name and address when the member state exposes them.","instructions":"Use for B2B invoice compliance: before issuing an intra-EU invoice without VAT, confirm the buyer's VAT number is valid via this adapter.\n\n**Country codes**: ISO 3166-1 alpha-2, plus EL for Greece and XI for Northern Ireland. Common codes: DE, AT, FR, IT, ES, NL, BE, PL, DK, SE, FI, IE, PT, CZ, HU, RO.\n\n**Format**: VAT number must NOT include the country code prefix (e.g. for DE123456789 pass countryCode='DE' and vatNumber='123456789').\n\n**Response**: `valid: true/false`, plus `name` and `address` when provided by the member state. Some countries (DE, ES) do not return name/address for privacy reasons — in that case only `valid` is authoritative.\n\n**Rate limit**: VIES is free but rate-limited per source IP. Batch validations with care; if you see `MS_UNAVAILABLE` or `SERVICE_UNAVAILABLE`, retry after a short delay.","region":"eu","category":"government","icon":"vies","docsUrl":"https://ec.europa.eu/taxation_customs/vies/","requiredEnvVars":[],"toolCount":1,"authType":"NONE"},{"slug":"weclapp","name":"weclapp Cloud ERP","description":"Access weclapp Cloud ERP data including parties (customers/suppliers), sales orders, invoices, and articles. Popular ERP for German SMBs.","region":"de","category":"erp","icon":"weclapp","docsUrl":"https://www.weclapp.com/api/","requiredEnvVars":["WECLAPP_TENANT","WECLAPP_API_TOKEN"],"toolCount":6,"authType":"API_KEY"},{"slug":"xentral","name":"Xentral ERP","description":"Access Xentral Cloud ERP — the SaaS ERP built specifically for German SMBs in e-commerce, wholesale, and manufacturing. Manage articles, customers, sales orders, invoices, and warehouse stock through the Xentral REST API.","instructions":"This connector uses the Xentral v1 REST API.\n\n**Instance URL**: Xentral is self-hosted per tenant. Paste your instance URL (without trailing slash) into `XENTRAL_URL` when importing — e.g. `https://koch.xentral.biz`. Do NOT append `/api`; the adapter handles that.\n\n**Credentials**: the classic API uses Basic authentication. Generate an API user in your Xentral instance under Einstellungen → Benutzer → API. The username is the API user's login, the password is its password. Set them as `XENTRAL_USER` and `XENTRAL_PASSWORD` at import time.\n\n**Entities covered**: articles (products), customers, sales orders (`/Auftrag`), invoices (`/Rechnung`), vendors, stock levels (`/Lager`), addresses.\n\n**Pagination**: list endpoints accept `page` and `items_per_page`. Default is 50 items per page.\n\n**Filtering**: use `filter` query parameter with Xentral filter DSL — e.g. `?filter=customer_number:eq:10001`.\n\n**Webhooks**: Xentral also supports webhooks for real-time events (configured in-instance, outside this adapter).","region":"de","category":"erp","icon":"xentral","docsUrl":"https://developer.xentral.com/docs","requiredEnvVars":["XENTRAL_URL","XENTRAL_USER","XENTRAL_PASSWORD"],"toolCount":7,"authType":"BASIC_AUTH"},{"slug":"companies-house","name":"UK Companies House","description":"Search and inspect the official UK companies register: company profiles, directors and secretaries, filing history. Free public API with a 600 requests / 5 minutes rate limit. The UK equivalent of the German Handelsregister.","instructions":"This connector uses the UK Companies House Public Data API v1.\n\n**Getting an API key**: register a free account at https://developer.company-information.service.gov.uk → 'Manage applications' → 'Create an application' (pick Live or Test) → 'Create new key' → REST. Copy the generated key into `COMPANIES_HOUSE_API_KEY`.\n\n**Authentication quirk**: Companies House uses HTTP Basic Auth where the API key is the **username** and the **password is empty** (the canonical curl shape is `-u API_KEY:`). This adapter mirrors that — leave the password configuration empty.\n\n**Company numbers**: always 8 characters, zero-padded (e.g. `00006400` not `6400`). The search endpoint returns matches with the canonical number you can feed into the other tools.\n\n**Rate limit**: 600 requests per 5-minute window per API key. Returns HTTP 429 with `Retry-After` when exceeded.\n\n**Free**: no paid tier required for the Public Data API. Streaming/companies-bulk products require separate registration.","region":"gb","category":"government","icon":"companies-house","docsUrl":"https://developer.company-information.service.gov.uk/","requiredEnvVars":["COMPANIES_HOUSE_API_KEY"],"toolCount":4,"authType":"BASIC_AUTH"},{"slug":"wise","name":"Wise (formerly TransferWise)","description":"Manage international money transfers via the Wise Platform API: list personal and business profiles, view balances, create quotes, list past transfers. Sandbox environment available for free at sandbox.transferwise.tech.","instructions":"This connector uses the Wise Platform API.\n\n**Production base URL**: `https://api.wise.com` (default).\n\n**Sandbox base URL**: `https://api.sandbox.transferwise.tech`. If you want to use the sandbox, override the connector's base URL after import — sandbox API tokens do not work against the production host and vice versa.\n\n**Getting an API token**:\n- Production: log in to wise.com → Settings → API tokens → Create new token. Choose `Read` for read-only tools, `Full access` for create-quote.\n- Sandbox: sign up at https://sandbox.transferwise.tech → Settings → API tokens. Sandbox tokens are free and unlimited for testing.\n\n**Profile types**: Wise accounts have one personal profile (`type=personal`) and optionally one or more business profiles (`type=business`). All other endpoints require a `profileId` returned by `wise_list_profiles`.\n\n**Idempotency**: `wise_create_quote` requires an `X-idempotency-key` header — pass a unique UUID per logical request so retries don't create duplicate quotes.\n\n**Currencies**: ISO-4217 three-letter codes (USD, EUR, GBP, …).","region":"gb","category":"banking","icon":"wise","docsUrl":"https://docs.wise.com/api-docs","requiredEnvVars":["WISE_API_TOKEN"],"toolCount":4,"authType":"BEARER_TOKEN"},{"slug":"activecampaign","name":"ActiveCampaign","description":"Drive ActiveCampaign (marketing automation + CRM) from any AI agent: contacts, lists, tags, deals, pipelines, campaigns, automations. 16 tools. Custom Api-Token header auth, per-account API URL.","instructions":"This connector uses the ActiveCampaign API v3.\n\n**Setup**:\n1. Sign in to ActiveCampaign → **Settings → Developer**. Two values:\n   - **URL** (your account's API URL): `https://{ACCOUNT}.api-us1.com` (or .api-eu1.com, etc.)\n   - **Key**: a long alphanumeric API key.\n2. Set `ACTIVECAMPAIGN_API_URL` = the full URL from step 1 (no trailing slash, no `/api/3`).\n3. Set `ACTIVECAMPAIGN_API_KEY` = the key.\n\n**Authentication**: custom header `Api-Token: ${ACTIVECAMPAIGN_API_KEY}`.\n\n**Account-scoped base URL**: every account has its own subdomain. The adapter substitutes `{{ACTIVECAMPAIGN_API_URL}}/api/3` as the base. If you use OAuth2 instead of the API key, the URL is the same.\n\n**Contact model**: every contact has `email` (primary key), plus optional firstName, lastName, phone. Custom fields are 'field values' — separate POSTs to `/fieldValues`. The adapter exposes both contact CRUD and field-value management.\n\n**Lists are static, Tags are flexible**: lists need explicit subscribe operations and trigger double-opt-in by default. Tags are unlimited, free-form labels — easier for segmentation.\n\n**Status values for contact-list memberships**: 1=Active, 2=Unsubscribed, 0=Pending double-opt-in confirmation. Pass these as integers in `contactList.status`.\n\n**Deals are CRM-side**: separate from contacts (one deal links to one primary contact + one organization). Has stage_id (pipeline position), value, currency.\n\n**Pagination**: most list endpoints support `limit` (max 100) + `offset`. `?include=...` side-loads related resources.\n\n**Rate limits**: ~5 req/sec per account on Plus/Pro, higher on Enterprise. On 429, back off.\n\n**Out of scope here**: campaign content composition (use UI), automation creation (UI-only), site tracking JS, deep CRM custom-object schemas, eCommerce integrations.","region":"intl","category":"marketing-automation","icon":"activecampaign","docsUrl":"https://developers.activecampaign.com/reference/overview","requiredEnvVars":["ACTIVECAMPAIGN_API_URL","ACTIVECAMPAIGN_API_KEY"],"toolCount":16,"authType":"API_KEY"},{"slug":"acuity-scheduling","name":"Acuity Scheduling","description":"Drive Acuity Scheduling (Squarespace-owned booking SaaS) from any AI agent: appointments, availability, appointment types, calendars, clients, products. 12 tools, Basic-auth.","instructions":"This connector uses the Acuity Scheduling API v1 (developers.acuityscheduling.com).\n\n**Setup**:\n1. Sign in to Acuity → **Integrations → API**.\n2. Note your **User ID** and copy the **API Key**.\n3. Set:\n   - `ACUITY_USER_ID` = numeric user ID (e.g. `12345`)\n   - `ACUITY_API_KEY` = the API key\n\n**Authentication**: HTTP Basic with username=USER_ID and password=API_KEY.\n\n**Availability flow**:\n  1. List appointment types (`acuity_list_appointment_types`) — get appointmentTypeID.\n  2. List calendars (`acuity_list_calendars`) — get calendarID(s).\n  3. List available dates (`acuity_list_available_dates`) for date+appointmentType+calendar.\n  4. List available times (`acuity_list_available_times`) for a specific date.\n  5. Book the appointment (`acuity_create_appointment`).\n\n**Cancellation**: appointments can be canceled (POST /appointments/{id}/cancel) — irreversible but client can rebook.\n\n**Timezones**: Acuity normalizes everything to the appointment's calendar timezone. Dates use ISO 8601 with offset.\n\n**Forms and custom fields**: appointments can have forms with custom fields — pass an array of {id, value} in `fields`.\n\n**Rate limits**: ~10 req/sec. On 429 back off.\n\n**Out of scope here**: products/packages purchases beyond list, certificates, email templates, scheduling-page customization.","region":"intl","category":"scheduling","icon":"acuity","docsUrl":"https://developers.acuityscheduling.com/reference/","requiredEnvVars":["ACUITY_USER_ID","ACUITY_API_KEY"],"toolCount":12,"authType":"BASIC_AUTH"},{"slug":"adyen","name":"Adyen","description":"Drive Adyen (global payment processor) checkout + payments + balance platform from any AI agent. 10 tools, API-key auth, separate live and test environments.","instructions":"This connector uses the Adyen Checkout API v71 and Payments Modifications API (docs.adyen.com).\n\n**Setup**:\n1. Sign in to https://ca-test.adyen.com (test) or https://ca-live.adyen.com (live) → **Developers → API credentials → New credential → API user**.\n2. Generate the API key. Note your **merchant account name** (visible in top dropdown, e.g. `AcmeCo`).\n3. Set:\n   - `ADYEN_API_KEY` = the API key\n   - `ADYEN_MERCHANT_ACCOUNT` = the merchant account name\n   - `ADYEN_ENV` = `test` or `live`\n   - For LIVE only: also set `ADYEN_LIVE_URL_PREFIX` = the URL prefix Adyen issued you (something like `abc123def-AcmeCo`). Find in CA → Developers → API URLs.\n\n**Authentication**: header `X-API-Key: ${ADYEN_API_KEY}`.\n\n**Base URL switches environment**: Adyen test → `https://checkout-test.adyen.com/v71`. Live → `https://{PREFIX}-checkout-live.adyenpayments.com/checkout/v71`. The adapter uses test by default; for live, point `ADYEN_CHECKOUT_BASE_URL` env var at the prefixed live URL.\n\n**Amount format**: `{currency: 'EUR', value: 1099}` — value in MINOR units (cents). EUR uses 2 decimals, JPY 0 decimals — Adyen handles per ISO 4217. NEVER pass decimals.\n\n**Idempotency**: pass `Idempotency-Key` header on POST `/payments` to dedupe retries.\n\n**Payment flow**:\n  1. `adyen_payment_methods` — get available methods for currency/country/amount.\n  2. `adyen_create_payment` — create the payment. Response includes `resultCode` (Authorised/Refused/Pending/RedirectShopper/etc.) and optional `action` (redirect/3DS challenge).\n  3. If action: shopper completes it client-side; server gets back `details` to submit.\n  4. `adyen_payments_details` — finalize.\n  5. Track via `adyen_payments_capture` (manual capture flow), `adyen_payments_refund`, `adyen_payments_cancel`.\n\n**Modifications**: capture/refund/cancel use the dedicated modification endpoints, NOT the same endpoint as create.\n\n**Webhooks** out of scope.\n\n**Out of scope here**: Terminal API (in-person), Balance Platform deep features, Marketpay, Recurring API beyond basic.","region":"intl","category":"payments","icon":"adyen","docsUrl":"https://docs.adyen.com/api-explorer/","requiredEnvVars":["ADYEN_API_KEY","ADYEN_MERCHANT_ACCOUNT"],"toolCount":10,"authType":"API_KEY"},{"slug":"agilecrm","name":"Agile CRM","description":"Manage Agile CRM (contacts, deals, tasks, notes, campaigns) from any AI agent. 9 tools, basic-auth with email + API key.","instructions":"This connector wraps the Agile CRM REST API (per-domain — yourdomain.agilecrm.com/dev/api).\n\n**Setup**:\n1. Sign in to your Agile CRM instance → top-right avatar → **Admin Settings → Developers & API → API key**. Copy.\n2. Note your subdomain (the part before `.agilecrm.com`).\n3. Set `AGILECRM_DOMAIN` (just subdomain), `AGILECRM_EMAIL` (your login email), `AGILECRM_API_KEY`.\n\n**Authentication**: HTTP Basic with `email:apikey` pair. The API also accepts a `key` query param; we use Basic for consistency.\n\n**Per-tenant baseUrl**: `https://${AGILECRM_DOMAIN}.agilecrm.com/dev/api` — substituted at import time.\n\n**Contact properties model**: contacts have a `properties[]` array of {name, value, type, subtype} pairs (NOT a flat field map). Standard names: `first_name`, `last_name`, `email`, `phone`, `company`, `title`. Custom fields appear in the same array.\n\n**Pagination**: cursor-based — pass `cursor` from previous response. Page size via `page_size` (max 100).\n\n**Rate limits**: 50 req/sec per account. 429 → back off 1s.\n\n**Out of scope here**: campaign workflow execution, web-form submission, ticket helpdesk, telephony.","region":"intl","category":"crm","icon":"agilecrm","docsUrl":"https://github.com/agilecrm/rest-api","requiredEnvVars":["AGILECRM_DOMAIN","AGILECRM_EMAIL","AGILECRM_API_KEY"],"toolCount":9,"authType":"BASIC_AUTH"},{"slug":"amadeus","name":"Amadeus for Developers","description":"Drive Amadeus Travel APIs (flight offers, hotel search, airport autocomplete, points of interest) from any AI agent. 8 tools, OAuth2 client-credentials Bearer auth.","instructions":"This connector uses the Amadeus Self-Service REST APIs (developers.amadeus.com).\n\n**Setup**:\n1. Register at https://developers.amadeus.com → **My Self-Service Workspace → Create New App**.\n2. Get **API Key** + **API Secret**. Use the **test** environment by default (free, real data, low rate limits); switch to production after applying for production access.\n3. Run OAuth2 client_credentials flow to get an access token (~30 min expiry):\n   ```\n   POST https://test.api.amadeus.com/v1/security/oauth2/token\n   grant_type=client_credentials&client_id=...&client_secret=...\n   ```\n4. Set `AMADEUS_ACCESS_TOKEN`. Refresh externally.\n\n**Authentication**: `Authorization: Bearer ${AMADEUS_ACCESS_TOKEN}`.\n\n**Test vs Production base URL**:\n  - Test: `https://test.api.amadeus.com`\n  - Production: `https://api.amadeus.com`\nThe adapter uses test by default; switch to production by overriding `AMADEUS_BASE_URL` env var (not exposed as a connector field — change baseUrl in your fork).\n\n**Date format**: ISO 8601 (YYYY-MM-DD).\n\n**Currency / Locale**: most search endpoints accept `currencyCode` (ISO 4217) and locale-specific responses.\n\n**Rate limits**: test environment is heavily throttled (~10 req/sec). On 429 back off significantly.\n\n**Out of scope here**: booking flow (Flight Create Orders requires special partnership), Self-Service vs Enterprise APIs differences, Amadeus Travel Channel API, hotel ratings via Sabre (different vendor).","region":"intl","category":"travel","icon":"amadeus","docsUrl":"https://developers.amadeus.com/self-service","requiredEnvVars":["AMADEUS_ACCESS_TOKEN"],"toolCount":8,"authType":"BEARER_TOKEN"},{"slug":"apollo","name":"Apollo.io","description":"Drive Apollo.io (B2B sales platform with contact database + enrichment + sequences) from any AI agent: people search, organization search, contact CRUD, deal stages, sequences. 11 tools.","instructions":"This connector uses the Apollo.io API v1 (docs.apollo.io).\n\n**Setup**:\n1. Sign in to Apollo.io → top-right avatar → **Settings → Integrations → API → API Keys → Create New API Key**.\n2. Name it ('AnythingMCP'). Copy the key.\n3. Set `APOLLO_API_KEY`.\n\n**Authentication**: header `X-Api-Key: ${APOLLO_API_KEY}`. (Note: Apollo also supports the api_key query parameter and the legacy `Authorization` header; this connector uses the header form.)\n\n**Search vs Enrich**: Apollo's central feature is searching its 275M+ people database (`/v1/mixed_people/search`). `match` endpoints enrich a known person/company by email/domain. People search is the entry point for prospecting workflows.\n\n**Credits model**: every `enrich`, `mixed_people/search` result, and reveal-email/phone call costs API credits. Read your plan's credit balance before bulk operations. Apollo returns `429 quota exceeded` (NOT a normal 429) when credits run out.\n\n**Email reveal mechanics**: searching returns 'unrevealed' contacts with email=null. To get the email, call `apollo_people_enrich` for that specific person — that consumes credits. Plan accordingly.\n\n**Sequences**: Apollo's outreach engine. Pulling contacts via search → adding them to a sequence is the most common write flow. Cadences are configured in the UI; the API just adds/removes contacts.\n\n**Filters**: people search accepts many filters — person_titles, person_locations, organization_num_employees_ranges, organization_industry_tag_ids, contact_email_status, etc. The adapter exposes the most common.\n\n**Pagination**: 1-based `page` parameter, `per_page` max 100. `pagination.total_pages` tells you when to stop.\n\n**Rate limits**: per plan — varies wildly. Enterprise has multi-thousand req/min, Starter much lower. On 429 honor `Retry-After`.\n\n**Out of scope here**: lead-scoring config, sequence template editing, conversation intelligence, plays/dispositions, billing.","region":"intl","category":"crm","icon":"apollo","docsUrl":"https://docs.apollo.io/reference/","requiredEnvVars":["APOLLO_API_KEY"],"toolCount":11,"authType":"API_KEY"},{"slug":"attio","name":"Attio","description":"Drive Attio (modern relationship-graph CRM) from any AI agent: records (people, companies, deals, custom objects), lists, tasks, notes. 12 tools, Bearer auth.","instructions":"This connector uses the Attio REST API v2 (developers.attio.com).\n\n**Setup**:\n1. Sign in to Attio → top-right avatar → **API & access → Create an access token** (or set up an OAuth app).\n2. Pick scopes: at minimum `object_configuration:read`, `record_permission:read`, `record_permission:read-write`, `list_configuration:read`, `note:read-write`.\n3. Copy the token. Set `ATTIO_ACCESS_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${ATTIO_ACCESS_TOKEN}`.\n\n**Object model**: Attio is highly schema-flexible. Default objects are `people`, `companies`, `deals`, `users`, `workspaces`. You can add custom objects (object_slug). Each object has attributes (fields) — different per workspace.\n\n**Records have a path-style ID**: `{object: 'people', record_id: 'abc-123-uuid'}`. Use `attio_list_objects` to see what's available.\n\n**Attributes / Values**: writing values requires the right shape per attribute type (text, number, date, status, select, multi-select, email-address, phone-number, currency, location, personal-name, record-reference). Wrap values in arrays: `{values: {email_addresses: [{email_address:'a@b.com'}]}}`.\n\n**Lists**: views/collections of records. Different from CRMs that use 'segments' or 'tags'. Each list has entries (record references).\n\n**Pagination**: `limit + offset`. Default 100, max 1000.\n\n**Rate limits**: 100 req per 10 sec per token. On 429 back off.\n\n**Out of scope here**: object/attribute schema CRUD, workspaces management, webhook subscription management.","region":"intl","category":"crm","icon":"attio","docsUrl":"https://developers.attio.com/reference","requiredEnvVars":["ATTIO_ACCESS_TOKEN"],"toolCount":12,"authType":"BEARER_TOKEN"},{"slug":"bamboohr","name":"BambooHR","description":"Manage BambooHR (employees, time-off, custom reports, fields, files) from any AI agent. 9 tools, basic-auth.","instructions":"This connector wraps the BambooHR REST API v1 (per-subdomain — api.bamboohr.com/api/gateway.php/<subdomain>/v1).\n\n**Setup**:\n1. Sign in to your BambooHR portal → top-right avatar → **API Keys → Add a new key**.\n2. Note your subdomain (the part before `.bamboohr.com`) and copy the key.\n3. Set `BAMBOOHR_SUBDOMAIN` and `BAMBOOHR_API_KEY`.\n\n**Authentication**: HTTP Basic — API key as username, literal `x` as password.\n\n**Path subdomain**: BambooHR's API embeds the subdomain in the URL path. The adapter substitutes via runtime envVar.\n\n**Custom fields**: pass `fields` as comma-separated field IDs (e.g. `firstName,lastName,workEmail,jobTitle,supervisor,customField4000010`). Without `fields`, only the basic employee profile is returned.\n\n**JSON response**: set `Accept: application/json` (the adapter does this) — otherwise BambooHR returns XML.\n\n**Rate limits**: not publicly documented; expect 60 req/min as a soft cap. 429 with `Retry-After`.\n\n**Out of scope here**: payroll, performance review CRUD, signed-document workflows, the Time Tracking add-on API.","region":"intl","category":"hr","icon":"bamboohr","docsUrl":"https://documentation.bamboohr.com/reference/","requiredEnvVars":["BAMBOOHR_SUBDOMAIN","BAMBOOHR_API_KEY"],"toolCount":9,"authType":"BASIC_AUTH"},{"slug":"basecamp","name":"Basecamp","description":"Drive Basecamp 4 (project & team collaboration) from any AI agent: projects, todo lists, todos, messages, comments, people. 12 tools, OAuth2 Bearer auth.","instructions":"This connector uses the Basecamp 4 API (37signals.com — github.com/basecamp/bc3-api).\n\n**Setup**:\n1. Register an integration at https://launchpad.37signals.com/integrations.\n2. Implement OAuth2 authorization-code flow with `https://launchpad.37signals.com/authorization` (response includes user's account_id).\n3. Set `BASECAMP_ACCESS_TOKEN` to the obtained access token.\n4. Set `BASECAMP_ACCOUNT_ID` to your Basecamp account ID (a 6-9 digit number — visible in any Basecamp URL or returned by the OAuth identity endpoint).\n\n**Authentication**: `Authorization: Bearer ${BASECAMP_ACCESS_TOKEN}`.\n\n**Account-scoped base URL**: every Basecamp account has its own subdomain. The API URL is `https://3.basecampapi.com/${BASECAMP_ACCOUNT_ID}/...`. The adapter substitutes the account ID via env var template.\n\n**User-Agent header**: Basecamp REQUIRES a meaningful User-Agent header on every request (their support staff need it to identify integrations). The adapter sets `User-Agent: AnythingMCP (https://anythingmcp.com)` automatically.\n\n**Resource model**:\n  - **Project** (called 'Basecamp' in the UI) — the top-level container.\n  - **Dock** — array of tools enabled on the project (todoset, message_board, schedule, vault, chat, etc.) each with its own URL.\n  - **Todoset** → multiple **Todolists** → multiple **Todos**.\n  - **Message Board** → multiple **Messages**.\n  - **Comments** can be attached to most recordings (todos, messages, etc.).\n\n**Recordings**: Basecamp's underlying primitive. A todo, message, comment, etc. is all a 'recording' with an `id` and a `type`. Many endpoints accept any recording_id and dispatch by type.\n\n**Person picker**: assignees are people IDs. List them via `basecamp_get_people` (account-wide) or per-project.\n\n**Status of completed todos**: completed=true sends a Boolean — not a separate endpoint. To 'reopen' a todo, send completed=false on the same todo.\n\n**Pagination**: 50 per page typical, Link header gives `next` URL. Some endpoints return all in one shot.\n\n**Rate limits**: 50 req per 10 sec per account. On 429 honor Retry-After.\n\n**Out of scope here**: Hill Charts, automatic check-ins, schedule entries, vault (file upload), Pings (DMs), Chat (Campfire) — all addressable via the API but each have idiosyncratic URLs returned by the Project dock; out of scope for this MVP connector.","region":"intl","category":"project-management","icon":"basecamp","docsUrl":"https://github.com/basecamp/bc3-api","requiredEnvVars":["BASECAMP_ACCESS_TOKEN","BASECAMP_ACCOUNT_ID"],"toolCount":12,"authType":"BEARER_TOKEN"},{"slug":"beehiiv","name":"beehiiv","description":"Drive beehiiv (modern newsletter platform) from any AI agent: publications, posts, subscriptions, segments, custom fields. 11 tools, Bearer auth.","instructions":"This connector uses the beehiiv API v2 (developers.beehiiv.com).\n\n**Setup**:\n1. Sign in to https://app.beehiiv.com → bottom-left avatar → **Settings → Integrations → API → Generate New API key**.\n2. Set the key to `BEEHIIV_API_KEY`.\n3. Note your **Publication ID** — visible in the URL when you're on a publication's dashboard (`/p/pub_XXX/...`). Set `BEEHIIV_PUBLICATION_ID`.\n\n**Authentication**: `Authorization: Bearer ${BEEHIIV_API_KEY}`.\n\n**Publication-scoped URL**: most endpoints live under `/publications/{publicationId}/...`. The adapter bakes publication ID into baseUrl.\n\n**Subscription model**: each subscriber has email, status (active, validating, inactive, pending, needs_attention), tier (free, premium), subscription_premium_tier_names[], referring_site, utm_source, utm_medium, utm_campaign, custom_fields[].\n\n**Posts**: each post (newsletter issue) has id, title, subtitle, slug, status (draft/confirmed/archived/scheduled), audience (free/premium/all), platform (web/email/both), web_url, content (HTML).\n\n**Pagination**: `?limit=N&page=M` (max 100).\n\n**Out of scope here**: payments/premium-tier management, ads, segments-builder, automation journeys.","region":"intl","category":"publishing","icon":"beehiiv","docsUrl":"https://developers.beehiiv.com/","requiredEnvVars":["BEEHIIV_API_KEY","BEEHIIV_PUBLICATION_ID"],"toolCount":11,"authType":"BEARER_TOKEN"},{"slug":"bigcommerce","name":"BigCommerce","description":"Drive BigCommerce (SaaS e-commerce platform) from any AI agent: products, variants, orders, customers, categories. 14 tools, API-key (X-Auth-Token) auth, per-store base URL.","instructions":"This connector uses the BigCommerce REST API v3 (developer.bigcommerce.com/docs/rest-catalog).\n\n**Setup**:\n1. Sign in to BigCommerce → **Settings → API → API Accounts → Create API Account → V2/V3 API token**.\n2. Pick scopes — at minimum: Products (Read+Write), Orders (Read+Write), Customers (Read+Write), Information & Settings (Read).\n3. Copy the **Access Token** and note the **API path** — looks like `https://api.bigcommerce.com/stores/{STORE_HASH}/v3/`.\n4. Set:\n   - `BIGCOMMERCE_STORE_HASH` = the alphanumeric store hash from the URL (e.g. `abcd1234`)\n   - `BIGCOMMERCE_ACCESS_TOKEN` = the access token\n\n**Authentication**: header `X-Auth-Token: ${BIGCOMMERCE_ACCESS_TOKEN}`. The base URL embeds the store hash.\n\n**v2 vs v3**: this connector uses v3 (the modern REST). Some legacy endpoints only exist in v2 (`/stores/{hash}/v2/...`) — not exposed here.\n\n**Catalog/Products**: complex hierarchy. Product has variants (SKUs), modifiers (configurable options), images, custom_fields, bulk_pricing_rules, metafields. Use `include` query param to side-load (e.g. `?include=variants,images,custom_fields`).\n\n**Order statuses**: 0=Incomplete, 1=Pending, 2=Shipped, 3=Partially Shipped, 4=Refunded, 5=Cancelled, 6=Declined, 7=Awaiting Payment, 8=Awaiting Pickup, 9=Awaiting Shipment, 10=Completed, 11=Awaiting Fulfillment, 12=Manual Verification Required, 13=Disputed, 14=Partially Refunded.\n\n**Pagination**: `?page=N&limit=M` (max 250). Response envelope: `{data:[], meta:{pagination:{total,count,per_page,current_page,total_pages,links}}}`.\n\n**Rate limits**: depends on plan — Essentials ~30k req/hour, Pro 60k, Enterprise unlimited. Returns 429 with `X-Rate-Limit-Time-Reset-Ms`.\n\n**Out of scope here**: subscriptions, B2B Edition features, Stencil themes, scripts/checkout SDK, webhooks.","region":"intl","category":"e-commerce","icon":"bigcommerce","docsUrl":"https://developer.bigcommerce.com/docs/rest-catalog","requiredEnvVars":["BIGCOMMERCE_STORE_HASH","BIGCOMMERCE_ACCESS_TOKEN"],"toolCount":14,"authType":"API_KEY"},{"slug":"bitrix24","name":"Bitrix24","description":"Manage Bitrix24 (CRM + tasks + workgroups + chat) via inbound webhooks from any AI agent. 10 tools, webhook-URL auth.","instructions":"This connector wraps the Bitrix24 REST API exposed via inbound webhooks.\n\n**Setup**:\n1. Log into your Bitrix24 portal (e.g. `myteam.bitrix24.com`) → **Developer resources → Other → Inbound webhook**.\n2. Pick scopes: at minimum `crm` (deals/contacts/companies/leads), `task` (tasks), `user` (users). Add `chat`, `socialnetwork` if needed.\n3. Save → copy the generated webhook URL of the form `https://YOURACCOUNT.bitrix24.com/rest/USER_ID/WEBHOOK_CODE/`. This is the secret — anyone with this URL can call the API as that user.\n4. Set `BITRIX24_WEBHOOK_URL` to the full URL (no trailing slash — the adapter adds it).\n\n**Authentication**: NO header / no token — auth is embedded in the URL path itself (`/rest/USER_ID/WEBHOOK_CODE/method.name`). Each method name (`crm.deal.list`, `tasks.task.add`, ...) becomes the last path segment.\n\n**Method naming**: Bitrix24 methods are dot-separated noun.entity.action — `crm.deal.list`, `crm.contact.add`, `tasks.task.update`. The adapter exposes a generic `bitrix24_call` wildcard plus typed wrappers for the most common CRM methods.\n\n**Parameters**: Bitrix uses POST with form-encoded body (`fields[TITLE]=...&fields[STAGE_ID]=...`). The adapter wraps this — pass `fields` as an object and the engine form-encodes it.\n\n**Pagination**: `start` (0-based offset). Response has `next` (next offset) and `total`.\n\n**Rate limits**: 2 req/sec per webhook URL; 10k methods/day on free plans, higher on paid. 429 returns `error: QUERY_LIMIT_EXCEEDED` — back off 1s.\n\n**On-premise**: same API works on self-hosted Bitrix24 — just point `BITRIX24_WEBHOOK_URL` at your install.\n\n**Out of scope here**: outbound webhook subscription, bizproc workflow execution, Bitrix24 cloud telephony (separate scope).","region":"intl","category":"crm","icon":"bitrix24","docsUrl":"https://training.bitrix24.com/rest_help/","requiredEnvVars":["BITRIX24_WEBHOOK_URL"],"toolCount":10,"authType":"NONE"},{"slug":"bluesky","name":"Bluesky","description":"Read & post on Bluesky (the AT Protocol social network) from any AI agent. 9 tools, app-password auth.","instructions":"This connector wraps the Bluesky AT Protocol XRPC API (bsky.social).\n\n**Setup**:\n1. In the Bluesky app or web client → **Settings → Privacy and Security → App Passwords → Add App Password**.\n2. Name it (e.g. 'mcp') and copy the generated `xxxx-xxxx-xxxx-xxxx` password. App passwords scope down what they can do — never use your account password.\n3. Set `BLUESKY_HANDLE` (e.g. `you.bsky.social`) and `BLUESKY_APP_PASSWORD`.\n\n**Two-step auth**: AT Protocol uses a session model. You can't just send the app password on every call — you must first POST to `/xrpc/com.atproto.server.createSession` with `{identifier, password}` and use the returned `accessJwt` as the Bearer token. The `bluesky_create_session` tool does step 1; subsequent tools use the JWT.\n\nFor production use the access JWT should be cached (it lasts ~2 hours) and refreshed with `refreshJwt` via `/xrpc/com.atproto.server.refreshSession`. This adapter exposes session create + refresh as tools so the caller can manage lifecycle.\n\n**DIDs vs handles**: Bluesky internally uses DIDs (`did:plc:abcd...`). Public APIs accept either DID or handle (`you.bsky.social`); use `bluesky_resolve_handle` to convert.\n\n**Post records**: posts are AT Protocol records of type `app.bsky.feed.post`. They have `text` (max 300 graphemes), `createdAt` (RFC3339), `langs[]`, and optional `embed` for images/links.\n\n**Rate limits**: 5k req / hour per JWT; create-session limited to 30/5min per IP. 429 with `Retry-After`.\n\n**Out of scope here**: image upload multipart (use the public URL embed pattern instead), labelers/moderation, custom feeds CRUD, DM (separate API), the firehose.","region":"intl","category":"social","icon":"bluesky","docsUrl":"https://docs.bsky.app/","requiredEnvVars":["BLUESKY_HANDLE","BLUESKY_APP_PASSWORD"],"toolCount":9,"authType":"NONE"},{"slug":"box","name":"Box","description":"Manage Box (enterprise content: files, folders, collaborations, comments, tasks, metadata) from any AI agent. 10 tools, OAuth2 token.","instructions":"This connector wraps the Box Content API v2 (api.box.com/2.0).\n\n**Setup — OAuth2**:\n1. Register at https://app.box.com/developers/console → **Create New App** → 'OAuth 2.0 with JWT' or 'OAuth 2.0 with User Authentication'.\n2. For user OAuth: complete the auth flow at `https://account.box.com/api/oauth2/authorize?response_type=code&client_id=...&redirect_uri=...`.\n3. Exchange the code at `https://api.box.com/oauth2/token`. Save the refresh_token.\n4. For JWT (server auth): generate an enterprise-level access token differently — out of scope for this OAuth-based adapter.\n5. Set `BOX_CLIENT_ID`, `BOX_CLIENT_SECRET`, `BOX_REFRESH_TOKEN`.\n\n**Authentication**: OAuth2 refresh handled by engine. Sends `Authorization: Bearer ACCESS_TOKEN`.\n\n**Folder ID 0** is the root folder of the authenticated user.\n\n**File-vs-Folder IDs**: Box assigns numeric IDs that are unique within file-space and folder-space but can collide across (file 123 ≠ folder 123). Always know whether you're operating on a file or folder.\n\n**Upload**: file upload uses a different host (`upload.box.com`) with multipart. Out of scope here for content upload — use the create_shared_link pattern with externally-hosted files for ingest.\n\n**Pagination**: `limit` (max 1000) + `offset` (0-based). Some endpoints support `marker` cursor pagination — pass `usemarker=true`.\n\n**Rate limits**: ~16 req/sec per token, soft. 429 with `Retry-After`.\n\n**Out of scope here**: file upload multipart, Box Sign workflows, retention policies, the new Box AI inference endpoints.","region":"intl","category":"storage","icon":"box","docsUrl":"https://developer.box.com/reference/","requiredEnvVars":["BOX_CLIENT_ID","BOX_CLIENT_SECRET","BOX_REFRESH_TOKEN"],"toolCount":10,"authType":"OAUTH2"},{"slug":"brevo","name":"Brevo","description":"Drive Brevo (formerly Sendinblue) — transactional email/SMS, marketing campaigns, contacts and lists — from any AI agent. 14 tools, api-key header auth, EU-based deliverability.","instructions":"This connector uses the Brevo REST API v3 (formerly known as Sendinblue API).\n\n**Setup**:\n1. Sign in to https://app.brevo.com → top-right avatar → **SMTP & API → API Keys → Generate a new API key**.\n2. Name it ('AnythingMCP'). It's prefixed `xkeysib-`. Set `BREVO_API_KEY`.\n\n**Authentication**: custom header `api-key: ${BREVO_API_KEY}` (lowercase header name — Brevo-specific). The adapter sets it via API_KEY profile.\n\n**Verified sender**: just like SendGrid, you must verify your sending domain or sender email before transactional email actually delivers (otherwise it lands in spam or is rejected). Brevo → **Senders & IP → Senders → Add a sender** OR domain authentication via SPF/DKIM.\n\n**Transactional vs Marketing**: `brevo_send_transactional_email` is for app-triggered 1-to-1 sends (receipts, password resets). `brevo_create_email_campaign` + `brevo_send_email_campaign_now` are for newsletter-style sends to a list. Pricing tiers are split per channel.\n\n**Contact lists vs folders**: contacts can belong to multiple `lists`. Lists can be organized into `folders` (for UI tidiness; folders have no behavioral meaning). Use `brevo_list_contact_lists` to discover list IDs.\n\n**Custom attributes**: each contact has `attributes` (FIRSTNAME, LASTNAME, plus any you define). Set them in `brevo_create_contact` via the `attributes` object: `{FIRSTNAME:'Jane', LANGUAGE:'fr'}`.\n\n**Pagination**: most list endpoints use `limit` (max 50 typically, 100 for some) + `offset`.\n\n**SMS sending**: also via the API. `brevo_send_transactional_sms` requires a verified sender name (≤11 chars, alphanumeric) AND the recipient phone in international format with `+` prefix.\n\n**Webhooks** out of scope (configured in UI for delivery to your hosted endpoint).\n\n**Rate limits**: ~400 req/sec for transactional email, lower for management endpoints. On 429, `Retry-After` is set.\n\n**Out of scope here**: WhatsApp Business via Brevo (use the dedicated WhatsApp Business connector), CRM/deals (separate Brevo product, not on the same API surface), conversations, automation workflows, attribute creation.","region":"intl","category":"email","icon":"brevo","docsUrl":"https://developers.brevo.com/","requiredEnvVars":["BREVO_API_KEY"],"toolCount":14,"authType":"API_KEY"},{"slug":"buffer","name":"Buffer","description":"Manage Buffer (social media scheduling: channels, posts, idea queue, analytics) from any AI agent via GraphQL. 8 tools, Bearer token.","instructions":"This connector wraps the Buffer Publish GraphQL API (graphql.buffer.com).\n\n**Setup**:\n1. Sign in at https://publish.buffer.com → top-right avatar → **Settings → API access → Generate personal access token**.\n2. Set `BUFFER_ACCESS_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${BUFFER_ACCESS_TOKEN}`.\n\n**GraphQL-only**: Buffer's modern API is GraphQL. The auto-injected `buffer_graphql_query` / `buffer_graphql_mutation` / `buffer_graphql_schema` builtins cover anything not in the typed wrappers below.\n\n**Channel = connected social account** (Twitter, LinkedIn, Facebook, Instagram, Mastodon, TikTok, Pinterest, YouTube, Bluesky, Threads). Each has an ID; posts must specify channelId(s).\n\n**Post status**: `PENDING_APPROVAL`, `SCHEDULED`, `SENT`, `FAILED`, `DRAFT`.\n\n**Rate limits**: 60 req/min per token. 429 with `Retry-After`.\n\n**Out of scope here**: organization/team membership, billing, Pablo image editor, the Analyze (analytics) deep reports.","region":"intl","category":"social","icon":"buffer","docsUrl":"https://buffer.com/developers/api","requiredEnvVars":["BUFFER_ACCESS_TOKEN"],"toolCount":13,"authType":"BEARER_TOKEN"},{"slug":"bugsnag","name":"Bugsnag","description":"Read & triage Bugsnag (now SmartBear Insight Hub) errors, projects, organizations, releases, pivots from any AI agent. 9 tools, token auth.","instructions":"This connector wraps the Bugsnag Data Access API (api.bugsnag.com).\n\n**Setup**:\n1. Log into https://app.bugsnag.com → bottom-left profile → **My Account → Personal Auth Tokens** → Generate.\n2. Pick the scopes you need (`project errors`, `project events`, `project release groups`, `project comments`, `project pivots`).\n3. Set `BUGSNAG_AUTH_TOKEN`.\n\n**Authentication**: every request sends `Authorization: token ${BUGSNAG_AUTH_TOKEN}` AND `X-Version: 2`. The adapter wires both for you.\n\n**Hierarchy**: `Organization → Project → Error → Event(s)`. An \"Error\" is the deduplicated group; \"Events\" are the individual occurrences with stack trace + breadcrumbs + user. To get useful debug info you usually want the latest event of an error.\n\n**Bootstrapping the IDs**:\n1. `bugsnag_list_organizations` → grab `org_id`.\n2. `bugsnag_list_projects` → grab `project_id`.\n3. `bugsnag_list_errors` → grab `error_id`.\n4. `bugsnag_get_event` → full stack trace.\n\n**Filter syntax**: error/event list endpoints accept `filters[field][type][operator]=value` repeated. Common: `filters[event.since][][type]=eq&filters[event.since][][value]=7d` (last 7 days), `filters[error.status][][type]=eq&filters[error.status][][value]=open`. Stick to a few common patterns in tool args — full grammar lives at https://bugsnagapiv2.docs.apiary.io/.\n\n**Rate limits**: 60 req/min per token, 5k/hour. 429 with `Retry-After` header.\n\n**Out of scope here**: project CRUD, account billing, integrations setup, deploys via REST (use the dedicated build reporter SDK instead).","region":"intl","category":"monitoring","icon":"bugsnag","docsUrl":"https://bugsnagapiv2.docs.apiary.io/","requiredEnvVars":["BUGSNAG_AUTH_TOKEN"],"toolCount":9,"authType":"API_KEY"},{"slug":"calendly","name":"Calendly","description":"Drive Calendly scheduling from any AI agent: list booked events, fetch invitees, query event types, check availability windows, generate single-use scheduling links and cancel meetings. 12 tools, Bearer-token auth.","instructions":"This connector uses the Calendly API v2.\n\n**Setup**:\n1. Sign in to https://calendly.com → **Integrations & Apps → API & webhooks → Personal Access Tokens → Create new token**.\n2. Give it a name (e.g. 'AnythingMCP'). The token is shown ONCE, copy it immediately. Personal Access Tokens never expire and inherit your user permissions.\n3. Set `CALENDLY_PERSONAL_ACCESS_TOKEN` to the token.\n\n**Authentication**: Bearer token. Calendly also supports OAuth2 for multi-user apps but Personal Access Tokens are the right fit for single-account agent use.\n\n**The URI model**: every Calendly resource is identified by a full HTTPS URI, NOT a bare ID. For instance a user is `https://api.calendly.com/users/AAAAAAAAAAAAAAAA`, not just `AAAAAAAAAAAAAAAA`. List endpoints expect these URIs as query parameters (e.g. `?user=https%3A%2F%2Fapi.calendly.com%2Fusers%2F...`). Always grab the URI from a prior tool's response — the easiest starting point is `calendly_get_current_user`, whose `resource.uri` is your user URI. Same model for organizations, event types, and scheduled events.\n\n**Pagination**: cursor-based. Each list response has `pagination.next_page_token`. Pass it as `page_token` on the next call.\n\n**Cancelling a meeting**: counter-intuitively uses POST, not DELETE (`POST /scheduled_events/{uuid}/cancellation`). Body accepts a `reason` text that's shown to the invitee. The adapter exposes this as `calendly_cancel_scheduled_event`.\n\n**Availability windows**: `calendly_list_event_type_available_times` returns the open slots between `start_time` and `end_time` for an event type. The span MUST be ≤ 7 days; longer ranges return 400. For multi-week scans, call it once per week.\n\n**Single-use scheduling links**: `calendly_create_single_use_scheduling_link` produces a URL that can be booked ONCE (max_event_count=1) for a specific event type. Useful when an agent wants to invite one specific person without exposing your generic Calendly profile.\n\n**Read-mostly**: Calendly's API is heavier on reads than writes. There's no 'create new event type' or 'create new booking on behalf of someone' endpoint — bookings come from invitees clicking a scheduling link.\n\n**Rate limits**: 100k requests / day per account, with a burst window. On 429, back off.\n\n**Webhooks** out of scope (`/webhook_subscriptions` is supported via API but receiving the payloads needs a hosted endpoint).\n\n**Plan gating**: certain endpoints (organizations, memberships, routing forms) require Teams or Enterprise plans. Personal accounts get 403 — error message identifies the plan required.","region":"intl","category":"scheduling","icon":"calendly","docsUrl":"https://developer.calendly.com/api-docs","requiredEnvVars":["CALENDLY_PERSONAL_ACCESS_TOKEN"],"toolCount":12,"authType":"BEARER_TOKEN"},{"slug":"chargebee","name":"Chargebee","description":"Drive Chargebee (subscription billing) from any AI agent: customers, subscriptions, invoices, plans, addons, coupons. 14 tools, Basic-auth, per-site base URL.","instructions":"This connector uses the Chargebee API v2 (apidocs.chargebee.com/docs/api).\n\n**Setup**:\n1. Sign in to Chargebee → **Settings → API Keys → + Create a Key**.\n2. Pick a Full-Access key for write operations OR a Restricted Key for read-only.\n3. Note your **site subdomain** (e.g. `acme-test` if your URL is `acme-test.chargebee.com`).\n4. Set:\n   - `CHARGEBEE_SITE` = the subdomain (without `.chargebee.com`)\n   - `CHARGEBEE_API_KEY` = the full API key (`live_...` or `test_...`)\n\n**Authentication**: HTTP Basic with username=API_KEY, password=empty.\n\n**Site-templated URL**: `https://{{CHARGEBEE_SITE}}.chargebee.com/api/v2`. Test vs Live sites are different subdomains (e.g. `acme-test` vs `acme`) and have different API keys.\n\n**Amount format**: monetary values are integers in MINOR units (cents) — `1000` = $10.00 USD or €10.00 EUR. Match the site's primary currency (or pass `currency_code`).\n\n**Idempotency**: pass `chargebee-idempotency-key` header on writes to dedupe retries. (The adapter exposes this as a regular `idempotency_key` parameter on write tools.)\n\n**Form-encoded requests**: Chargebee historically uses application/x-www-form-urlencoded for POST/PUT bodies (with nested keys as `subscription[plan_id]=...`). The adapter handles this via bodyEncoding=form-urlencoded.\n\n**Subscription lifecycle**: future → in_trial → active → non_renewing → cancelled. Pause via `chargebee_pause_subscription` (returns paused), resume via `chargebee_resume_subscription`.\n\n**Webhooks** out of scope.\n\n**Rate limits**: 750 req per 5 min per site on Standard. On 429 honor X-Rate-Limit-Reset.\n\n**Out of scope here**: hosted pages, portal session, refundable credits, gifts, transactions detail, hierarchies, comments, virtual bank accounts, gateway/payment-source CRUD.","region":"intl","category":"payments","icon":"chargebee","docsUrl":"https://apidocs.chargebee.com/docs/api","requiredEnvVars":["CHARGEBEE_SITE","CHARGEBEE_API_KEY"],"toolCount":14,"authType":"BASIC_AUTH"},{"slug":"clearbit","name":"Clearbit","description":"Enrich emails, domains and IPs via Clearbit (HubSpot Breeze Intelligence). 6 tools, Bearer auth. Marketing intelligence + technographics + firmographics.","instructions":"This connector uses the Clearbit Enrichment + Discovery + Risk + Reveal APIs (dashboard.clearbit.com).\n\n**Note**: Clearbit was acquired by HubSpot in 2023 and is now sold as **HubSpot Breeze Intelligence**. The legacy clearbit.com API endpoints remain functional for existing customers as of 2025 but new sign-ups go through HubSpot. Set your CLEARBIT_API_KEY exactly as Clearbit issues it.\n\n**Setup**:\n1. Sign in to https://dashboard.clearbit.com → **API Keys** (or for HubSpot Breeze: HubSpot Settings → Integrations → Breeze Intelligence → API).\n2. Copy the secret API key (prefixed with `sk_`).\n3. Set `CLEARBIT_API_KEY`.\n\n**Authentication**: HTTP Basic with username=API_KEY, password=empty (Stripe-style). The adapter uses BASIC_AUTH.\n\n**Endpoints split across subdomains**:\n  - `person.clearbit.com/v2/people/find?email=X` — Person enrichment by email\n  - `company.clearbit.com/v2/companies/find?domain=X` — Company enrichment by domain\n  - `discovery.clearbit.com/v1/companies/search?query=Q` — Search companies by criteria\n  - `risk.clearbit.com/v1/calculate` — Risk score on an email or IP\n  - `reveal.clearbit.com/v1/companies/find?ip=X` — Reverse-IP-to-company (B2B intent)\nThe adapter uses person.clearbit.com as baseUrl and absolute URLs for others.\n\n**Credit costs**: each enrichment call costs credits. Plans range from 1k/month free to 100k+/month enterprise. Use `/health` (free) for testing.\n\n**Webhook mode**: Clearbit can push enrichment results when the underlying data updates — out of scope for this connector.\n\n**Out of scope here**: Salesforce sync, deanonymization, x-targets, account-targeting webhook receivers.","region":"intl","category":"enrichment","icon":"clearbit","docsUrl":"https://dashboard.clearbit.com/docs","requiredEnvVars":["CLEARBIT_API_KEY"],"toolCount":6,"authType":"BASIC_AUTH"},{"slug":"clickup","name":"ClickUp","description":"Drive ClickUp (project management) from any AI agent: spaces, folders, lists, tasks, comments, time tracking, custom fields, teams, members. 16 tools, API token auth.","instructions":"This connector uses the ClickUp API v2 (clickup.com/api).\n\n**Setup**:\n1. Sign in to ClickUp → top-right avatar → **Settings → Apps → API Token → Generate** (personal token).\n2. Copy the token (starts with `pk_`). Set `CLICKUP_API_TOKEN`.\n\n**Authentication**: header `Authorization: ${CLICKUP_API_TOKEN}` — no `Bearer ` or `Token ` prefix, just the raw key. The adapter sets this via API_KEY profile.\n\n**Hierarchy**: Workspace (=Team) → Space → Folder (optional) → List → Task → Subtask. Lists can also exist directly inside a Space without a Folder. Discover IDs top-down: `clickup_list_teams` (returns workspaces, oddly called 'teams' in the API) → `clickup_list_spaces(teamId)` → `clickup_list_folders(spaceId)` → `clickup_list_lists(folderId)` OR `clickup_list_folderless_lists(spaceId)`.\n\n**Task IDs**: every task has an `id` (e.g. `abc123`). The same task can also be addressed by `custom_id` (the human-readable like 'PROJ-42') if your workspace enabled custom task IDs — set `custom_task_ids=true` in calls that use custom IDs.\n\n**Statuses are per-list**: each list has its own status set ('Open', 'In Progress', 'Done'). To move a task, set `status` to a status name (case-insensitive) that exists on the task's current list.\n\n**Custom fields**: arrays of `{id, value}` on every task. Discover via `clickup_get_list_custom_fields(listId)`.\n\n**Assignees**: array of user IDs (NOT emails). Get user IDs from `clickup_list_team_members(teamId)`.\n\n**Date fields**: Unix timestamp in MILLISECONDS (not seconds), e.g. `1717200000000`.\n\n**Pagination**: most list endpoints return up to 100 by default. Some support `page` (0-indexed) + `order_by` + `reverse`.\n\n**Rate limits**: 100 req/min for Free Forever, scales up with plan. On 429 honor `X-RateLimit-Reset` (Unix timestamp).\n\n**Out of scope here**: webhooks, automations, dependencies, goals/targets, attachments upload (use external URL), chat, dashboards, sprints.","region":"intl","category":"project-management","icon":"clickup","docsUrl":"https://clickup.com/api","requiredEnvVars":["CLICKUP_API_TOKEN"],"toolCount":15,"authType":"API_KEY"},{"slug":"clockify","name":"Clockify","description":"Manage Clockify (time tracking, projects, clients, tags, reports) from any AI agent. 10 tools, X-Api-Key auth.","instructions":"This connector wraps the Clockify REST API v1 (api.clockify.me/api/v1).\n\n**Setup**:\n1. Sign in to https://clockify.me → bottom-left avatar → **Preferences → Advanced → API → Generate API key**.\n2. Set `CLOCKIFY_API_KEY`.\n\n**Authentication**: `X-Api-Key: ${CLOCKIFY_API_KEY}` on every request.\n\n**Workspace IDs**: Clockify is workspace-scoped. Use `clockify_get_user` first — its response contains `defaultWorkspace` and `activeWorkspace`. List workspaces with `clockify_list_workspaces`.\n\n**Time entry shape**: `start` + `end` are ISO 8601 UTC with the literal `Z` suffix (e.g. `2026-05-20T14:30:00Z`). For a running entry, OMIT `end` — the entry will be live until you call `clockify_stop_current_entry`.\n\n**Project / Task / Tag IDs**: every entity ID is a 24-char hex Mongo-style ID (e.g. `5b1e7b7b7e8d8e3a4c5d6f78`). Always look them up first via the list endpoints; user-facing names are not accepted.\n\n**Pagination**: `page` (1-based) + `page-size` (max 5000 but default 50). Some endpoints also support cursor pagination via `cursor`.\n\n**Rate limits**: 50 req/s per workspace; bursts tolerated. 429 with no Retry-After — back off 1s.\n\n**Out of scope here**: Reports endpoints (different base host `reports.api.clockify.me`, would be a sibling adapter), approval workflows, Pumble integration.","region":"intl","category":"time-tracking","icon":"clockify","docsUrl":"https://docs.clockify.me/","requiredEnvVars":["CLOCKIFY_API_KEY"],"toolCount":10,"authType":"API_KEY"},{"slug":"close","name":"Close CRM","description":"Drive Close (sales-team CRM) from any AI agent: leads, contacts, opportunities, activities (calls/emails/SMS/notes), tasks, smart views and custom fields. 16 tools, API-key Basic-auth.","instructions":"This connector uses the Close API v1 (https://developer.close.com).\n\n**Setup**:\n1. Sign in to Close → top-right avatar → **Settings → Developer → API Keys → New API Key**.\n2. Name it ('AnythingMCP'), copy the key (starts with `api_`). Set `CLOSE_API_KEY`.\n\n**Authentication**: HTTP Basic auth with username=API_KEY and password empty. The adapter passes `Authorization: Basic base64(API_KEY:)`. Same as Stripe's auth model.\n\n**Lead is the top-level object** — a 'lead' in Close is what other CRMs call an 'account' or 'company': it groups multiple `contacts` (the actual people), `opportunities` (deal-level pipeline records), and `activities` (timeline of calls/emails/notes/SMS). When in doubt, the agent should start with `close_search_leads` (Smart View query) rather than searching contacts directly.\n\n**Custom field IDs**: like Pipedrive, custom fields have opaque IDs. Discover via `close_list_lead_custom_fields` / `close_list_contact_custom_fields` / `close_list_opportunity_custom_fields`. Reference them in writes via `custom.cf_XYZ` keys on the resource.\n\n**Smart Views (saved searches)**: Close's central UX is filtered queries. The API exposes them via `close_search_leads` with a `query` JSON (the same DSL the UI builds). Easiest: build the view in the UI, copy its Smart View ID, then call `close_get_smart_view` to inspect — but for ad-hoc queries the `query` param accepts the JSON directly.\n\n**Activities are typed**: call, email, sms, note, meeting, task_completed, lead_status_change, opportunity_status_change. Use `close_create_note_activity` for plain notes; for calls/emails the SaaS expects you to use Close's built-in dialer / email integration, not POST a fake activity (the agent shouldn't fabricate a sent email).\n\n**Pagination**: cursor-based via `_skip` + `_limit` (max 100 per page) plus `has_more` boolean. Some list endpoints return total counts in `meta`.\n\n**Rate limits**: ~80 requests/sec burst per organization. On 429, back off — `RateLimit-Reset` header is set.\n\n**Out of scope here**: dialer call recording, email sequences (use Close UI), reports/analytics computation, integrations (Mailchimp/Stripe sync), webhook subscription management.","region":"intl","category":"crm","icon":"close","docsUrl":"https://developer.close.com/","requiredEnvVars":["CLOSE_API_KEY"],"toolCount":16,"authType":"BASIC_AUTH"},{"slug":"coda","name":"Coda","description":"Drive Coda (docs + tables + formulas) from any AI agent: docs, tables, rows, columns, formulas, packs, controls. 13 tools, Bearer token auth.","instructions":"This connector uses the Coda API v1 (coda.io/developers/apis/v1).\n\n**Setup**:\n1. Sign in to https://coda.io → top-right avatar → **Account → API settings → Generate API token**.\n2. Name the token. Copy it. Set `CODA_API_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${CODA_API_TOKEN}`.\n\n**Resource hierarchy**: Doc → Section (Page) → Table → Row → Cell. Coda's twist: tables are first-class with structured columns and types; rows are addressable individually; columns can hold formulas.\n\n**Doc IDs** look like `dXXXXXXXXXX` (10-char prefix `d`). Visible in the doc URL.\n\n**Table IDs** look like `grid-XXXXX`. Discover via `coda_list_tables(docId)`.\n\n**Column IDs** look like `c-XXXX`. Discover via `coda_list_columns(docId, tableId)`. When upserting rows you reference cells by column ID OR column name.\n\n**Row IDs** look like `i-XXXX`. Available after a row is created.\n\n**Upserting rows (with key columns)**: pass `keyColumns` (array of column IDs/names) to `coda_upsert_rows` — Coda matches existing rows by those columns and updates them, otherwise inserts. Without `keyColumns`, it always inserts.\n\n**Cell value formats**:\n  - Text/Number/Boolean: pass the raw value.\n  - Date/DateTime: ISO 8601 string.\n  - Person: pass an object `{email}`.\n  - Lookup/Relation: pass the row ID of the related row OR the display value.\n  - Image/Attachment: pass a public HTTPS URL.\n\n**Sync vs disableParsing**: by default Coda parses cell values (interprets formulas, types). Set `disableParsing=true` if you want raw string passthrough.\n\n**Pagination**: cursor via `pageToken` (returned in response's `nextPageToken`). `limit` default 25, max 200.\n\n**Rate limits**: 100 req/min per token. On 429 back off.\n\n**Out of scope here**: doc creation/publishing, control updates beyond list, pack version management, automations, formula evaluation arbitrary, sections beyond list.","region":"intl","category":"project-management","icon":"coda","docsUrl":"https://coda.io/developers/apis/v1","requiredEnvVars":["CODA_API_TOKEN"],"toolCount":13,"authType":"BEARER_TOKEN"},{"slug":"coingecko","name":"CoinGecko","description":"Query CoinGecko (crypto prices, market data, historical, exchanges, NFT floor prices) from any AI agent. 8 tools, optional API-key auth.","instructions":"This connector wraps the CoinGecko REST API.\n\n**Setup**:\n1. The PUBLIC API (api.coingecko.com/api/v3) requires NO API key but is harshly rate-limited (~10-30 calls/min) and missing some endpoints.\n2. For higher throughput, sign up for the free DEMO plan at https://www.coingecko.com/en/developers/dashboard → create an `x-cg-demo-api-key`. This raises the limit to 30 calls/min and stays free.\n3. Paid PRO plans use a different host (pro-api.coingecko.com) and header `x-cg-pro-api-key` — switch baseUrl + auth header accordingly.\n4. Set `COINGECKO_API_KEY` if you have one; leave unset for anonymous public access.\n\n**Authentication**: optional. When `COINGECKO_API_KEY` is set, the adapter sends `x-cg-demo-api-key: ${KEY}`. When unset, no auth header is sent.\n\n**Coin IDs not symbols**: CoinGecko endpoints want the internal coin ID (`bitcoin`, `ethereum`, `solana`), not the ticker (`BTC`, `ETH`, `SOL`). Use `coingecko_search` or `coingecko_list_coins` first to look up the canonical ID. The mapping is one-way: 'BTC' → 'bitcoin'.\n\n**Pagination**: most list endpoints support `per_page` (1-250) and `page` (1-based). Default `per_page` is 100.\n\n**Currency codes**: pass `vs_currency=usd|eur|btc|eth` lowercase. The full list is at `/simple/supported_vs_currencies`.\n\n**Rate limits**: 429 responses come with a `Retry-After` header — respect it. Public tier: ~10-30/min; Demo: 30/min; Pro: from 500/min.\n\n**Out of scope here**: streaming/WebSocket price feeds, DEX-specific GraphQL endpoints (use the dedicated Onchain DEX API instead), CSV bulk export.","region":"intl","category":"data","icon":"coingecko","docsUrl":"https://docs.coingecko.com/reference/introduction","requiredEnvVars":[],"toolCount":8,"authType":"API_KEY"},{"slug":"convertkit","name":"Kit (ConvertKit)","description":"Drive Kit (formerly ConvertKit) — creator-focused email marketing — from any AI agent: subscribers, tags, forms, sequences, broadcasts, custom fields. 14 tools, v4 API with API-key Bearer auth.","instructions":"This connector uses the Kit v4 API (Kit was renamed from ConvertKit in 2024 — the API still works at api.convertkit.com under v4).\n\n**Setup**:\n1. Sign in to https://app.kit.com → **Advanced Settings → API → Show v4 API key**.\n2. Copy the v4 API key. Set `CONVERTKIT_API_KEY`.\n3. (Optional, only for older v3 endpoints not used here): the v3 API uses an `api_secret` — not needed for this connector.\n\n**Authentication**: `Authorization: Bearer ${CONVERTKIT_API_KEY}`. The adapter handles this via BEARER_TOKEN.\n\n**Subscriber model**: every email is a 'subscriber'. State machine: `active`, `inactive` (manually paused), `bounced`, `complained`, `cancelled`. New subscribers default to `active`. Adding to a sequence does NOT create an active subscriber automatically — they must be active first.\n\n**Tags vs Forms vs Sequences**:\n  - **Forms**: capture points (signup widgets, landing pages). When a subscriber fills a form, they're added to the form's list AND tagged with any default tags the form applies.\n  - **Tags**: free-form labels. The primary segmentation primitive. A subscriber can have unlimited tags.\n  - **Sequences**: timed email courses (used to be 'autoresponder courses'). You subscribe a contact to a sequence and they receive its emails on a schedule.\n  - **Broadcasts**: one-time emails to a subset (by tags/forms/sequences). The newsletter primitive.\n\n**Custom fields** are at the account level — define them in the UI, then set values per subscriber via `fields` object in create/update.\n\n**Pagination**: cursor-based. List responses include `pagination: {has_previous_page, has_next_page, start_cursor, end_cursor, per_page}`. Pass `after=$end_cursor` (or `before=$start_cursor`) on the next call. Default per_page=500, max 5000 for some endpoints.\n\n**Rate limits**: 600 requests per minute per API key. On 429, back off — `X-RateLimit-Reset` header tells you when.\n\n**Webhooks** out of scope (Kit supports them, configured in UI to point at your hosted endpoint).\n\n**Out of scope here**: writing automation rules, landing-page builder, commerce / digital products, deliverability headers config.","region":"intl","category":"email","icon":"convertkit","docsUrl":"https://developers.kit.com/v4","requiredEnvVars":["CONVERTKIT_API_KEY"],"toolCount":14,"authType":"BEARER_TOKEN"},{"slug":"copper","name":"Copper CRM","description":"Drive Copper (Google Workspace-native CRM) from any AI agent: people, companies, opportunities, leads, activities, tasks. 12 tools, API-token auth with email + token + appname headers.","instructions":"This connector uses the Copper REST API v1 (developer.copper.com).\n\n**Setup**:\n1. Sign in to Copper → top-right avatar → **Settings → Integrations → API Keys → Generate API Key**.\n2. Copy: the key + the email of the user it belongs to.\n3. Set:\n   - `COPPER_API_KEY` = generated key\n   - `COPPER_USER_EMAIL` = the email of the API key owner\n   - `COPPER_APP_NAME` = a label for your integration (e.g. `anythingmcp`)\n\n**Authentication**: three custom headers — `X-PW-AccessToken: ${COPPER_API_KEY}`, `X-PW-Application: developer_api`, `X-PW-UserEmail: ${COPPER_USER_EMAIL}`. Quirky but it's Copper's convention.\n\n**Pluralization quirk**: most endpoints use the PLURAL form (`/people`, `/companies`, `/opportunities`, `/leads`). Single-record GETs use `/people/{id}`. Search uses `POST /people/search` (yes, POST for read — Copper-specific).\n\n**People = contacts**, **Leads = unqualified prospects** (separate object before they become a person attached to a company). A 'company' is one record; a 'person' belongs to one company.\n\n**Pagination**: search endpoints use `page_number` (1-based) + `page_size` (max 200). The response is a flat array; total count is NOT returned by default.\n\n**Custom fields**: `custom_fields` on every record — array of `{custom_field_definition_id, value}`. Discover IDs via `copper_list_custom_field_definitions`.\n\n**Rate limits**: ~10 req/sec per account. On 429, back off.\n\n**Out of scope here**: webhooks, projects, automations, custom activity types beyond standard, file attachments.","region":"intl","category":"crm","icon":"copper","docsUrl":"https://developer.copper.com/","requiredEnvVars":["COPPER_API_KEY","COPPER_USER_EMAIL","COPPER_APP_NAME"],"toolCount":12,"authType":"API_KEY"},{"slug":"crisp","name":"Crisp","description":"Drive Crisp (live chat + helpdesk) from any AI agent: conversations, messages, people, tickets. 11 tools, plugin-token Basic auth + tier header.","instructions":"This connector uses the Crisp REST API v1 (docs.crisp.chat/api/v1/).\n\n**Setup**:\n1. Sign in to Crisp → **Marketplace → Create a Plugin** (the modern way for API access; the legacy User token approach is deprecated).\n2. Pick scopes: at minimum `website:conversation:read`, `website:conversation:write`, `website:people:read`.\n3. After creating + reviewing, you get `plugin_id`, `plugin_identifier`, `plugin_key` (the credentials).\n4. Install the plugin on your website (give it a website_id to act on).\n5. Set:\n   - `CRISP_PLUGIN_IDENTIFIER` = the identifier\n   - `CRISP_PLUGIN_KEY` = the key\n   - `CRISP_WEBSITE_ID` = the website ID to operate on\n\n**Authentication**: HTTP Basic with username=PLUGIN_IDENTIFIER + password=PLUGIN_KEY + custom header `X-Crisp-Tier: plugin` on every request.\n\n**Conversation model**: every conversation has a `session_id` (unique per chat). Messages live inside a conversation, ordered chronologically.\n\n**Session vs People**: Crisp tracks `people` (long-lived contact profiles) and `sessions` (single chat). A session attaches to a people record by email/phone/segment matching.\n\n**Message origins**: chat, email, sms, twitter, facebook, instagram, whatsapp, telegram, slack, messenger, line, etc. Crisp normalizes them in the same conversation thread.\n\n**Rate limits**: 100 req per 10 sec per website. On 429 back off.\n\n**Out of scope here**: plugin management, RTM/WebSocket events, MagicType (AI-generated reply suggestions), Crisp Status (status page), Triggers.","region":"intl","category":"support","icon":"crisp","docsUrl":"https://docs.crisp.chat/api/v1/","requiredEnvVars":["CRISP_PLUGIN_IDENTIFIER","CRISP_PLUGIN_KEY","CRISP_WEBSITE_ID"],"toolCount":11,"authType":"BASIC_AUTH"},{"slug":"datadog","name":"Datadog","description":"Query Datadog (metrics, logs, monitors, events, incidents, dashboards) from any AI agent. 8 tools, dual-key auth.","instructions":"This connector wraps the Datadog REST API v1/v2 (api.datadoghq.com).\n\n**Setup**:\n1. In your Datadog org → **Personal Settings → Organization Settings → API Keys** → create or copy an API key. Set `DATADOG_API_KEY`.\n2. **Organization Settings → Application Keys** → create an application key with at least `monitors_read`, `logs_read_data`, `dashboards_read`, `events_read` scopes. Set `DATADOG_APP_KEY`.\n3. **Site matters**: Datadog has multiple regions: US1 (datadoghq.com — default), US3 (us3.datadoghq.com), US5 (us5.datadoghq.com), EU1 (datadoghq.eu), AP1 (ap1.datadoghq.com), US1-FED (ddog-gov.com). If your org is on a non-US1 site, change `baseUrl` accordingly. Wrong site = 403 with `Forbidden` and no useful body.\n\n**Authentication**: Datadog requires BOTH headers on every request:\n- `DD-API-KEY: ${DATADOG_API_KEY}` — identifies the org\n- `DD-APPLICATION-KEY: ${DATADOG_APP_KEY}` — identifies the user/permissions\n\n**Metrics query language**: `q` uses the Datadog metric query syntax — `avg:system.cpu.user{*}` or `sum:trace.web.request.hits{env:prod} by {service}`. See https://docs.datadoghq.com/dashboards/functions/.\n\n**Time windows**: `from` / `to` are UNIX epoch seconds (NOT milliseconds, NOT ISO strings). Default windows: last 1h for metrics, last 15min for logs.\n\n**Logs search**: uses the same query syntax as the Logs Explorer UI — `service:api status:error @http.status_code:>=500`. Returns `data[]` with `attributes.message`, `attributes.tags`, etc.\n\n**Rate limits**: most read endpoints are 300 req/h per org. Monitors API allows 100/min. 429 responses include `X-RateLimit-Reset` (epoch seconds).\n\n**Out of scope here**: agent install / install-script generation, SLO CRUD beyond list, RUM/synthetics CRUD.","region":"intl","category":"monitoring","icon":"datadog","docsUrl":"https://docs.datadoghq.com/api/latest/","requiredEnvVars":["DATADOG_API_KEY","DATADOG_APP_KEY"],"toolCount":8,"authType":"API_KEY"},{"slug":"deel","name":"Deel","description":"Manage Deel (global EOR / contractor platform: people, contracts, invoices, payments, organizations) from any AI agent. 10 tools, Bearer token.","instructions":"This connector wraps the Deel API v2 (api.letsdeel.com/rest/v2).\n\n**Setup**:\n1. Log into https://app.deel.com → top-right avatar → **Developer Center → Create API token**.\n2. Pick scopes (read/write people, contracts, invoices, etc.).\n3. Set `DEEL_API_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${DEEL_API_TOKEN}`.\n\n**Entity model**: `Person` (worker) → `Contract` (engagement: EOR, contractor, direct employee) → `Invoice` (per pay period) → `Payment` (the disbursement). Each has its own endpoint.\n\n**Pagination**: `limit` (max 250) + `offset` (0-based). Response has `total` count.\n\n**Rate limits**: 100 req/min per token. 429 with `Retry-After`.\n\n**Out of scope here**: equity grants, expense reimbursements multi-step (upload + claim), payroll-cycle adjustments, the legacy v1 endpoints.","region":"intl","category":"hr","icon":"deel","docsUrl":"https://developer.deel.com/reference/","requiredEnvVars":["DEEL_API_TOKEN"],"toolCount":10,"authType":"BEARER_TOKEN"},{"slug":"discord-bot","name":"Discord Bot","description":"Send messages, embeds, files and reactions to Discord channels and DMs from any AI agent via the Discord REST API. 13 tools, Bot Token auth. Outbound + lightweight channel/guild reads (no gateway / websocket / voice).","instructions":"This connector uses the Discord REST API v10 (https://discord.com/developers/docs).\n\n**Setup**:\n1. Open https://discord.com/developers/applications → **New Application** → name it (this becomes the app, not the bot).\n2. Sidebar → **Bot → Reset Token → copy the token**. Treat as a secret — anyone with it can act as the bot.\n3. Sidebar → **Installation** (or **OAuth2 → URL Generator** in older UI): pick scope `bot`, then permissions like Send Messages, Embed Links, Attach Files, Read Message History, Add Reactions, View Channels. Open the generated URL in a browser to **install the bot into a server** (you must be admin or have Manage Server). Repeat per server.\n4. Set `DISCORD_BOT_TOKEN` to the token from step 2.\n\n**Authentication**: header `Authorization: Bot {{DISCORD_BOT_TOKEN}}` — note the literal `Bot ` prefix (NOT `Bearer`). The adapter sets this header via authType=API_KEY with the `Authorization` header name.\n\n**Snowflake IDs**: every channel, guild, user, message in Discord is a numeric snowflake (~18-19 digits, string-typed). Discover them via `discord_bot_list_guilds` → `discord_bot_list_guild_channels` → drill down. In the Discord client, enable **Developer Mode** (User Settings → Advanced) and right-click any object → 'Copy ID' to grab snowflakes manually.\n\n**Channel types**: 0=text, 2=voice, 4=category, 5=announcement, 11=public thread, 12=private thread, 13=stage, 15=forum. Messages can be sent to text (0), announcement (5), threads (11/12), forum posts (15 via thread).\n\n**Sending a message — embeds vs content**:\n- `content`: plain text (Markdown supported, ≤ 2000 chars).\n- `embeds`: rich card with title/description/color/fields/image/timestamp (up to 10 per message, each ≤ 6000 chars total).\nUse embeds for structured data (release notes, alerts, dashboards).\n\n**File attachments**: must be uploaded as multipart in the same request — NOT supported in a single tool call here. Workaround: host the file on a public URL and include it as an embed image or a hyperlink in the content. For attaching the file itself, do the multipart upload externally and pass the resulting message_id.\n\n**Threads vs channels**: threads are child channels of a parent channel; the API treats them like channels (same endpoint `/channels/{id}/messages`). The thread_id IS the channel_id.\n\n**Rate limits**: per-route AND global. Discord returns `X-RateLimit-Remaining` / `X-RateLimit-Reset-After` headers. On 429, wait the `retry_after` seconds. Hard cap: 50 req/sec global per token.\n\n**Permission errors (50001 / 50013)**: bot needs the right server permission in the channel. Adjust the bot's role permissions or grant per-channel overrides.\n\n**DMs to users**: you can't DM a user out of the blue — you must first call `discord_bot_create_dm_channel` with the user_id to open a DM channel, then send to that channel_id. The user must also share at least one server with the bot.\n\n**Inbound / gateway / voice / slash commands**: out of scope here. The Discord WebSocket gateway (for receiving messages, presence, voice) and Interactions endpoints (slash commands) need a long-running process or a registered interactions webhook — separate plan.","region":"intl","category":"messaging","icon":"discord","docsUrl":"https://discord.com/developers/docs/reference","requiredEnvVars":["DISCORD_BOT_TOKEN"],"toolCount":13,"authType":"API_KEY"},{"slug":"drip","name":"Drip","description":"Drive Drip (e-commerce-focused email + SMS automation) from any AI agent: subscribers, tags, campaigns, events, orders. 12 tools, Basic-auth + account_id in URL.","instructions":"This connector uses the Drip REST API v2 (developer.drip.com).\n\n**Setup**:\n1. Sign in to https://www.getdrip.com → top-right avatar → **My User Settings → API → API Token**.\n2. Note your **Account ID** (visible in the URL, e.g. `getdrip.com/9876543/...` → 9876543).\n3. Set:\n   - `DRIP_API_TOKEN` = the API token\n   - `DRIP_ACCOUNT_ID` = numeric account ID\n\n**Authentication**: HTTP Basic with username=API_TOKEN, password='' (empty). Adapter uses BASIC_AUTH with empty password.\n\n**Account-scoped URLs**: every endpoint is prefixed with `/v2/{account_id}/...`. The adapter substitutes via env var.\n\n**Subscriber model**: subscribers are identified by email (primary) or by external `user_id` (your DB's ID). Custom fields are unlimited key/value pairs.\n\n**Events drive workflows**: Drip's selling point is sending behavioral events (`drip_create_event`) that trigger automated workflows you've designed in the UI. Events: 'Placed Order', 'Browsed Category', 'Abandoned Cart', etc.\n\n**Tags**: simpler segmentation primitive. Apply via `drip_tag_subscriber` (POST /subscribers/{email}/tags).\n\n**Pagination**: `?page=N&per_page=M` (max 1000 for subscribers, smaller for others).\n\n**Rate limits**: 3600 req/hour per account on Free, higher on paid. On 429 honor Retry-After.\n\n**Out of scope here**: workflow management (UI-only), broadcasts (UI), conversion tracking goals, A/B testing.","region":"intl","category":"marketing-automation","icon":"drip","docsUrl":"https://developer.drip.com/","requiredEnvVars":["DRIP_API_TOKEN","DRIP_ACCOUNT_ID"],"toolCount":12,"authType":"BASIC_AUTH"},{"slug":"dropbox","name":"Dropbox","description":"Manage Dropbox (file storage: list, download, upload, move, copy, delete, search, share, metadata) from any AI agent. 10 tools, OAuth2 token.","instructions":"This connector wraps the Dropbox API v2 (api.dropboxapi.com).\n\n**Setup — OAuth2**:\n1. Register at https://www.dropbox.com/developers/apps → **Create app** → 'Scoped access' → 'App folder' or 'Full Dropbox' depending on need.\n2. Add the scopes you need (files.metadata.read, files.content.read, files.content.write, sharing.write, ...).\n3. Generate a **Refresh token** via OAuth flow with `token_access_type=offline`.\n4. Set `DROPBOX_CLIENT_ID`, `DROPBOX_CLIENT_SECRET`, `DROPBOX_REFRESH_TOKEN`.\n\n**Authentication**: OAuth2 refresh handled by engine. Sends `Authorization: Bearer ACCESS_TOKEN`.\n\n**Two API hosts**: most endpoints live at `api.dropboxapi.com/2`. Content endpoints (upload/download) use `content.dropboxapi.com/2` — out of scope here for upload (multipart streaming). Use the link-based pattern: have content already accessible via URL → use `dropbox_save_url` to ingest, or use external upload then create_shared_link to share.\n\n**Path format**: paths use `/Folder/Subfolder/File.txt` (case-insensitive, no leading drive). Root is empty string or `/`. For App-folder apps, paths are relative to the app folder.\n\n**Pagination**: most list endpoints use a `cursor` returned in the response. Pass back as `cursor` to continue.\n\n**Rate limits**: per-endpoint quotas, generally 100-1000 req/min. 429 with `Retry-After`.\n\n**Out of scope here**: direct file upload (multipart, separate API), Paper docs, team admin, the legacy v1 API.","region":"intl","category":"storage","icon":"dropbox","docsUrl":"https://www.dropbox.com/developers/documentation/http/documentation","requiredEnvVars":["DROPBOX_CLIENT_ID","DROPBOX_CLIENT_SECRET","DROPBOX_REFRESH_TOKEN"],"toolCount":10,"authType":"OAUTH2"},{"slug":"dropbox-sign","name":"Dropbox Sign (HelloSign)","description":"Drive Dropbox Sign (e-signature, formerly HelloSign) from any AI agent: signature requests, templates, signature embeds, downloads. 10 tools, API-key Basic auth.","instructions":"This connector uses the Dropbox Sign API v3 (developers.hellosign.com).\n\n**Setup**:\n1. Sign in to https://app.hellosign.com → top-right avatar → **API → Test Mode + Live API → Generate API Key**.\n2. Use the test API key during development; switch to live when going to production.\n3. Set `DROPBOX_SIGN_API_KEY`.\n\n**Authentication**: HTTP Basic with username=API_KEY, password=empty.\n\n**test_mode**: every write endpoint accepts `test_mode=1` to NOT charge credits / NOT send real signature requests. Always test first.\n\n**Signature Request workflow**:\n  1. Create signature request from a template (`create_with_template`) OR from file URLs (`create`).\n  2. Recipients receive emails to sign.\n  3. Poll `get` to track status (status_code: awaiting_signature, signed, declined, expired).\n  4. Download the final PDF after status=signed.\n\n**Embedded signing**: alternative flow where you host the signature UI in your app (no Dropbox Sign emails sent). Requires `embedded_signing_enabled: true` in your account.\n\n**Pagination**: `?page=N&page_size=M` (default 20, max 100).\n\n**Out of scope here**: templates editing (UI), API app management, embedded request URL flows beyond basics, fax, signature accounts setup.","region":"intl","category":"e-signature","icon":"dropbox-sign","docsUrl":"https://developers.hellosign.com/api/reference/","requiredEnvVars":["DROPBOX_SIGN_API_KEY"],"toolCount":10,"authType":"BASIC_AUTH"},{"slug":"ecwid","name":"Ecwid","description":"Drive Ecwid (Lightspeed-owned e-commerce platform) from any AI agent: products, categories, orders, customers. 10 tools, OAuth2 Bearer auth, store-scoped URL.","instructions":"This connector uses the Ecwid REST API v3 (api-docs.ecwid.com).\n\n**Setup**:\n1. Sign in to Ecwid → **My Profile → My Apps → Create App** (or use a personal Storefront API token from your Ecwid control panel).\n2. Note your **Store ID** (numeric) — visible in your Ecwid control panel URL.\n3. Set:\n   - `ECWID_STORE_ID` = numeric store ID\n   - `ECWID_TOKEN` = your access token (private personal token or OAuth2 access token)\n\n**Authentication**: `Authorization: Bearer ${ECWID_TOKEN}`.\n\n**Store-scoped URL**: `https://app.ecwid.com/api/v3/{{ECWID_STORE_ID}}`.\n\n**Product model**: products have id, sku, name, price, originalPrice, costPrice, weight, quantity, unlimited (track stock?), enabled, inStock, categoryIds[], options[], variants[].\n\n**Order statuses (paymentStatus)**: AWAITING_PAYMENT, PAID, CANCELLED, REFUNDED, PARTIALLY_REFUNDED, INCOMPLETE.\n**fulfillmentStatus**: AWAITING_PROCESSING, PROCESSING, SHIPPED, DELIVERED, WILL_NOT_DELIVER, RETURNED, READY_FOR_PICKUP, OUT_FOR_DELIVERY.\n\n**Pagination**: `?offset=N&limit=M` (max 100).\n\n**Out of scope here**: subscription billing, ApplePay/GooglePay setup, payment gateway management, themes/storefront customization.","region":"intl","category":"e-commerce","icon":"ecwid","docsUrl":"https://api-docs.ecwid.com/","requiredEnvVars":["ECWID_STORE_ID","ECWID_TOKEN"],"toolCount":10,"authType":"BEARER_TOKEN"},{"slug":"etsy","name":"Etsy","description":"Read Etsy shop data (listings, transactions, receipts, reviews) from any AI agent. 9 tools, OAuth2 + x-api-key dual auth.","instructions":"This connector uses the Etsy Open API v3 (developers.etsy.com).\n\n**Setup**:\n1. Register an app at https://www.etsy.com/developers/your-apps → **Create New App**.\n2. Note the **Keystring** (this is your x-api-key) and **Shared secret**.\n3. Run OAuth2 PKCE flow with scopes `transactions_r listings_r email_r shops_r` (or write-scopes if needed).\n4. Get the access token (1 hour expiry) + refresh token (long-lived).\n5. Set:\n   - `ETSY_API_KEY` = the Keystring (a.k.a. x-api-key)\n   - `ETSY_ACCESS_TOKEN` = the OAuth2 access token\n\n**Authentication**: BOTH headers needed simultaneously:\n  - `x-api-key: ${ETSY_API_KEY}`\n  - `Authorization: Bearer ${ETSY_ACCESS_TOKEN}`\nThe adapter sets the api-key via API_KEY profile and adds Authorization via extraHeaders (uses the engine's extraHeaders support).\n\n**Shop ID**: every account has a shop_id. Get it from `etsy_get_authenticated_user` then `etsy_get_user_shops`.\n\n**Pagination**: `?limit=N&offset=M` (limit max 100).\n\n**Rate limits**: 10k req/24h per app. On 429 back off.\n\n**Out of scope here**: listing image uploads, write-scope listing creation (Etsy's listing publish flow is multi-step), payment account, billing, taxonomy edits.","region":"intl","category":"e-commerce","icon":"etsy","docsUrl":"https://developers.etsy.com/documentation/","requiredEnvVars":["ETSY_API_KEY","ETSY_ACCESS_TOKEN"],"toolCount":9,"authType":"API_KEY"},{"slug":"fathom","name":"Fathom Analytics","description":"Read Fathom Analytics (privacy-friendly web analytics) from any AI agent: aggregations, pageviews, events, sites, custom domains. 6 tools, Bearer auth.","instructions":"This connector uses the Fathom Analytics API v1 (usefathom.com/api).\n\n**Setup**:\n1. Sign in to https://app.usefathom.com → top-right avatar → **Account → API Keys → Generate a new API key**.\n2. Pick scopes: at minimum 'sites:read' + 'aggregations:read'.\n3. Set `FATHOM_API_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${FATHOM_API_TOKEN}`.\n\n**Aggregations API**: the most useful — flexible querying like Stripe Sigma. Pass `entity`, `entity_id`, `aggregates`, `date_grouping`, filters, etc. Returns rows of data.\n\n**Common queries**:\n  - Pageviews this week, by day: aggregates=`pageviews,visits,uniques` + date_from=`2025-01-01` + date_grouping=`day`\n  - Top pages: aggregates=`pageviews,uniques` + field_grouping=`pathname` + sort_by=`pageviews:desc`\n  - Top referrers: aggregates=`pageviews,uniques` + field_grouping=`referrer_hostname` + sort_by=`pageviews:desc`\n  - Events conversion: entity=`event` + entity_id=YOUR_EVENT_ID + aggregates=`conversions,uniques,value`\n\n**Rate limits**: 240 req/min per token. On 429 back off.\n\n**Out of scope here**: site CRUD (Fathom limits this), event CRUD beyond list, account billing.","region":"intl","category":"analytics","icon":"fathom","docsUrl":"https://usefathom.com/api","requiredEnvVars":["FATHOM_API_TOKEN"],"toolCount":6,"authType":"BEARER_TOKEN"},{"slug":"fillout","name":"Fillout","description":"Read Fillout (modern form/survey builder) form definitions and submissions from any AI agent. 6 tools, Bearer auth.","instructions":"This connector uses the Fillout API v1 (fillout.com/help/developers).\n\n**Setup**:\n1. Sign in to https://fillout.com → top-right avatar → **Settings → Developer → API → Create API key**.\n2. Set `FILLOUT_API_KEY`.\n\n**Authentication**: `Authorization: Bearer ${FILLOUT_API_KEY}`.\n\n**Form IDs**: each form has a 32-character ID (visible in form URL). Use `fillout_list_forms` to discover.\n\n**Submission shape**: each submission has questions[] array of {id, name, type, value}. Cross-reference with form questions for human-readable names.\n\n**Pagination**: `?limit=N&offset=M`. Submissions endpoint supports `?afterDate=ISO&beforeDate=ISO`.\n\n**Out of scope here**: form creation (UI), file uploads, webhook subscription management.","region":"intl","category":"forms","icon":"fillout","docsUrl":"https://fillout.com/help/developers","requiredEnvVars":["FILLOUT_API_KEY"],"toolCount":6,"authType":"BEARER_TOKEN"},{"slug":"flutterwave","name":"Flutterwave","description":"Manage Flutterwave (Africa payments: payments, customers, subscriptions, transfers, refunds, payouts) from any AI agent. 10 tools, Bearer secret.","instructions":"This connector wraps the Flutterwave API v3 (api.flutterwave.com/v3).\n\n**Setup**:\n1. Sign in at https://app.flutterwave.com → **Settings → API**.\n2. Note your **Secret Key** (`FLWSECK_TEST-...` for test, `FLWSECK-...` for live) AND public key (used client-side).\n3. Set `FLUTTERWAVE_SECRET_KEY`.\n\n**Authentication**: `Authorization: Bearer ${FLUTTERWAVE_SECRET_KEY}`.\n\n**Test vs Live**: secret key prefix determines mode. Test transactions never touch real cards.\n\n**Amounts**: Flutterwave uses major-unit decimal floats (₦1.50 = `1.50`), unlike Paystack — pay attention.\n\n**Charge flow**: server creates a payment → returns a hosted checkout `link`. Customer pays → Flutterwave redirects back with `transaction_id`. Verify via `flutterwave_verify_transaction`.\n\n**Pagination**: `page` (1-based) + `per_page` (max 200).\n\n**Rate limits**: 100 req/sec per key. 429 → exponential.\n\n**Out of scope here**: virtual cards, BVN verification, settlements, dispute management.","region":"intl","category":"payments","icon":"flutterwave","docsUrl":"https://developer.flutterwave.com/reference/","requiredEnvVars":["FLUTTERWAVE_SECRET_KEY"],"toolCount":10,"authType":"BEARER_TOKEN"},{"slug":"folk","name":"Folk","description":"Drive Folk (modern relationship CRM) from any AI agent: people, companies, groups, deals, custom fields. 9 tools, Bearer auth.","instructions":"This connector uses the Folk REST API v2 (developer.folk.app).\n\n**Setup**:\n1. Sign in to https://app.folk.app → bottom-left avatar → **API & Integrations → API → Generate API token**.\n2. Set `FOLK_API_TOKEN`.\n3. Note your workspace's groups — Folk's groups are loose collections (use them like tags).\n\n**Authentication**: `Authorization: Bearer ${FOLK_API_TOKEN}`.\n\n**People / Companies / Deals**: standard CRM objects, plus the relationship-graph idea — every person is linked to one or more companies, plus a free-form network of contacts.\n\n**Groups**: flexible — Folk's primary segmentation. Add a person to multiple groups; each group has its own custom fields visible only when the person is in that group.\n\n**Pagination**: cursor — `nextPageToken`.\n\n**Out of scope here**: messages composer, sequences, automations, integrations management.","region":"intl","category":"crm","icon":"folk","docsUrl":"https://developer.folk.app/","requiredEnvVars":["FOLK_API_TOKEN"],"toolCount":9,"authType":"BEARER_TOKEN"},{"slug":"freshbooks","name":"FreshBooks","description":"Manage FreshBooks (invoices, clients, expenses, time entries, payments) from any AI agent. 9 tools, OAuth2 auth.","instructions":"This connector wraps the FreshBooks New API (api.freshbooks.com/accounting).\n\n**Setup — OAuth2 refresh flow**:\n1. Go to https://my.freshbooks.com/#/developer → **Create an App**. Set redirect URI to your callback.\n2. Run the auth flow: `https://my.freshbooks.com/oauth/authorize?response_type=code&client_id=...&redirect_uri=...&scope=user:profile:read user:clients:read user:invoices:read user:invoices:write user:expenses:read user:time_entries:read user:payments:read user:payments:write`.\n3. Exchange the code at `https://api.freshbooks.com/auth/oauth/token` for access + refresh tokens.\n4. **Account ID**: the FreshBooks API requires an Account ID (`bzz...`) on most endpoints — find it via `GET /auth/api/v1/users/me` (the `accountid` of your first business). Set `FRESHBOOKS_ACCOUNT_ID`.\n5. Set `FRESHBOOKS_CLIENT_ID`, `FRESHBOOKS_CLIENT_SECRET`, `FRESHBOOKS_REFRESH_TOKEN`, `FRESHBOOKS_ACCOUNT_ID`.\n\n**Authentication**: OAuth2 with the engine's refresh handling. Access token sent as `Bearer`. Account ID goes in the URL path on most endpoints — substituted via runtime envVar.\n\n**Two-account-types**: classic 'accounting' (US) and 'projects' (international, the new product). This adapter covers the accounting endpoints.\n\n**Response shape**: FreshBooks wraps everything in `{response: {result: {<entity_plural>: [...]}}}`. The adapter does not unwrap automatically — handle in the caller.\n\n**Pagination**: `page` (1-based) + `per_page` (max 100). Cursor on some newer endpoints.\n\n**Rate limits**: 30 req/min per token, 3600/hr. 429 → exponential.\n\n**Out of scope here**: reports, journal entries, project tracking (separate `/projects` API).","region":"intl","category":"accounting","icon":"freshbooks","docsUrl":"https://www.freshbooks.com/api/start","requiredEnvVars":["FRESHBOOKS_CLIENT_ID","FRESHBOOKS_CLIENT_SECRET","FRESHBOOKS_REFRESH_TOKEN","FRESHBOOKS_ACCOUNT_ID"],"toolCount":9,"authType":"OAUTH2"},{"slug":"freshchat","name":"Freshchat","description":"Manage Freshchat (live chat + messaging: users, conversations, messages, channels, agents) from any AI agent. 9 tools, Bearer token.","instructions":"This connector wraps the Freshchat API v2 (per-region — api.freshchat.com/v2).\n\n**Setup**:\n1. Log into your Freshchat portal → **⚙️ → Account Settings → API Tokens → Generate Token**.\n2. Note your region — Freshchat hosts data per region: `api.freshchat.com` (US), `api.eu.freshchat.com` (EU), `api.au.freshchat.com` (AU), `api.in.freshchat.com` (IN). Change baseUrl to match.\n3. Set `FRESHCHAT_API_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${FRESHCHAT_API_TOKEN}`.\n\n**Conversation model**: `User → Conversation → Messages[]`. A conversation is associated with at most one user; messages carry actor + actor_type (user, agent, system).\n\n**Pagination**: `page` (1-based) + `items_per_page` (default 25, max 100).\n\n**Rate limits**: 60 req/min per token. 429 with `Retry-After`.\n\n**Out of scope here**: bot flow editor, IntelliAssign automation, billing.","region":"intl","category":"support","icon":"freshchat","docsUrl":"https://developers.freshchat.com/api/","requiredEnvVars":["FRESHCHAT_API_TOKEN"],"toolCount":9,"authType":"BEARER_TOKEN"},{"slug":"freshdesk","name":"Freshdesk","description":"Drive Freshdesk (customer support helpdesk) from any AI agent: tickets, contacts, companies, agents, conversations. 16 tools, API-key Basic-auth, per-domain base URL.","instructions":"This connector uses the Freshdesk REST API v2 (developers.freshdesk.com).\n\n**Setup**:\n1. Sign in to Freshdesk → top-right avatar → **Profile Settings → Your API Key** (right sidebar).\n2. Copy the key. Set:\n   - `FRESHDESK_DOMAIN` = your account subdomain (e.g. `acme` if URL is `acme.freshdesk.com`)\n   - `FRESHDESK_API_KEY` = the API key\n\n**Authentication**: HTTP Basic with username=API_KEY, password='X' (any non-empty). The adapter handles this via BASIC_AUTH with username=`{{FRESHDESK_API_KEY}}` and password=`X`.\n\n**Subdomain in base URL**: `https://{{FRESHDESK_DOMAIN}}.freshdesk.com/api/v2`. Wrong subdomain → 404 with vendor's branded 'Page not found'.\n\n**Ticket status integer codes**: 2=Open, 3=Pending, 4=Resolved, 5=Closed. Custom statuses get integer IDs assigned in Admin UI.\n\n**Priority codes**: 1=Low, 2=Medium, 3=High, 4=Urgent.\n\n**Source codes**: 1=Email, 2=Portal, 3=Phone, 4=Forum, 5=Twitter, 6=Facebook, 7=Chat, 8=MobiHelp, 9=FeedbackWidget, 10=OutboundEmail, 11=Ecommerce.\n\n**Updating ticket reply vs note**: replies (visible to requester) go to `/tickets/{id}/reply` with body. Internal notes go to `/tickets/{id}/notes` with body and private=true. The adapter exposes both.\n\n**Pagination**: `?page=N&per_page=M` (max 100). Total count via `?include=stats` or via response Link header.\n\n**Rate limits**: ~1000 req/hour per plan baseline (varies). On 429 honor Retry-After.\n\n**Out of scope here**: automations/workflows, SLA policies, solution articles (Freshdesk Solutions has its own API), satisfaction surveys, Freshchat/Freshcaller integrations (separate Freshworks products).","region":"intl","category":"support","icon":"freshdesk","docsUrl":"https://developers.freshdesk.com/api/","requiredEnvVars":["FRESHDESK_DOMAIN","FRESHDESK_API_KEY"],"toolCount":16,"authType":"BASIC_AUTH"},{"slug":"freshservice","name":"Freshservice","description":"Manage Freshservice (ITSM: tickets, problems, changes, assets, agents, requesters, departments) from any AI agent. 10 tools, basic-auth with API key.","instructions":"This connector wraps the Freshservice API v2 (per-tenant — yourdomain.freshservice.com/api/v2).\n\n**Setup**:\n1. Log into your Freshservice instance → top-right avatar → **Profile Settings → View API Key** (you may need to log in again to reveal).\n2. Note your tenant subdomain (the part before `.freshservice.com`).\n3. Set `FRESHSERVICE_SUBDOMAIN` (just the subdomain) and `FRESHSERVICE_API_KEY`.\n\n**Authentication**: HTTP Basic, with the API key as username and the literal string `X` as the password:\n  `Authorization: Basic base64(API_KEY:X)`\nThe adapter sets this via BASIC_AUTH (username = api key, password = 'X'). Using your account password instead of the API key is allowed but discouraged.\n\n**Per-tenant baseUrl**: `https://${FRESHSERVICE_SUBDOMAIN}.freshservice.com/api/v2`. Substituted at import time.\n\n**Ticket statuses** (integer codes):\n- 2: Open\n- 3: Pending\n- 4: Resolved\n- 5: Closed\nPriorities: 1=Low, 2=Medium, 3=High, 4=Urgent. Sources: 1=Email, 2=Portal, 3=Phone, 4=Chat, 5=Feedback widget, 6=Yammer, 7=AWS Cloudwatch, 8=Pagerduty, 9=Walkup, 10=Slack.\n\n**ITIL records**: Freshservice exposes Tickets, Problems, Changes, Releases. They share much of the same shape but live at different endpoints.\n\n**Pagination**: `page` (1-based) + `per_page` (max 100). Header `Link` carries the next-page URL. Many list endpoints cap at 9 pages total — for full export use the dedicated archive APIs.\n\n**Rate limits**: 100 req/min per API key on Starter, up to 1k/min on Enterprise. 429 returns `Retry-After` in seconds.\n\n**Out of scope here**: workflow automation, project portfolio management, contract CRUD beyond list, asset relationships graph.","region":"intl","category":"support","icon":"freshservice","docsUrl":"https://api.freshservice.com/v2/","requiredEnvVars":["FRESHSERVICE_SUBDOMAIN","FRESHSERVICE_API_KEY"],"toolCount":10,"authType":"BASIC_AUTH"},{"slug":"front","name":"Front","description":"Drive Front (collaborative inbox) from any AI agent: conversations, messages, contacts, tags, inboxes, teammates. 13 tools, API-key Bearer auth.","instructions":"This connector uses the Front Core API (dev.frontapp.com/reference).\n\n**Setup**:\n1. Sign in to Front → **Settings (top-right) → Developers → API Tokens → Create API Token**.\n2. Pick scope: `private` (full-access to all inboxes/conversations) or scoped to a specific inbox/role.\n3. Copy the token. Set `FRONT_API_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${FRONT_API_TOKEN}`.\n\n**Front's tile model**:\n  - **Conversation** = a thread between your team and one or more contacts. Has status (open/archived/spam/deleted), assignee, inbox, tags.\n  - **Message** = each inbound/outbound email, SMS, chat, etc. within a conversation.\n  - **Contact** = an external entity (a customer). Has handles[] of various types (email, phone, twitter, custom).\n  - **Inbox** = a shared mailbox (could map to an email address, a Slack channel, an SMS number).\n  - **Teammate** = a Front user.\n\n**Sending replies**: a 'reply' is a new message in an existing conversation. POST `/conversations/{id}/messages` (the adapter wraps as `front_send_reply`). For new outbound conversations, POST `/channels/{id}/messages` (different endpoint).\n\n**Pagination**: cursor-based via `?limit=N&page_token=...`. Response includes `_pagination.next` URL.\n\n**Tagged dates**: dates on objects come as Unix timestamps (seconds, NOT ms).\n\n**Resource references**: many fields are URLs like `https://api2.frontapp.com/contacts/cnt_xxx` instead of plain IDs — extract the ID after the last `/` if you need a bare ID, or just pass the URL back to Front in subsequent calls (Front accepts both).\n\n**Rate limits**: ~50 req/sec per token (varies). On 429 honor headers.\n\n**Out of scope here**: rules/automation, analytics endpoints, custom-channel creation, signature management, knowledge-base.","region":"intl","category":"support","icon":"front","docsUrl":"https://dev.frontapp.com/reference","requiredEnvVars":["FRONT_API_TOKEN"],"toolCount":13,"authType":"BEARER_TOKEN"},{"slug":"ghost","name":"Ghost","description":"Drive Ghost (open-source publishing platform) from any AI agent: posts, pages, tags, members, newsletters. 12 tools, Admin API JWT auth.","instructions":"This connector uses the Ghost Admin API v5 (ghost.org/docs/admin-api/).\n\n**Setup**:\n1. Sign in to Ghost Admin → **Settings → Advanced → Integrations → Add custom integration**.\n2. Copy the **Admin API Key** — format is `<id>:<secret>` (e.g. `5f3a...c4:b9d8...e2`).\n3. Set:\n   - `GHOST_ADMIN_API_URL` = your Ghost site's admin API base, e.g. `https://yoursite.com/ghost/api/admin`\n   - `GHOST_ADMIN_API_KEY` = the full `id:secret` key from step 2\n\n**Authentication — JWT generation required**: Ghost's Admin API does NOT accept the raw API key. Each request needs a JWT signed with the secret half. The JWT is short-lived (5 min) and has these claims:\n```\n  alg: 'HS256', kid: <id_part>, typ: 'JWT'\n  exp: now+5min, iat: now, aud: '/admin/'\n```\nThis connector currently expects the OPERATOR or external orchestrator to **generate the JWT and pass it as `GHOST_ADMIN_JWT`** — the engine then sends `Authorization: Ghost ${GHOST_ADMIN_JWT}`. For a proper LOGIN_TOKEN-style auto-rotation see the Sorare adapter as the reference pattern; that's a future enhancement.\n\n**Workaround for testing**: use the official `@tryghost/admin-api` JS SDK to generate a JWT and copy it as `GHOST_ADMIN_JWT`. Or use the Ghost CLI: `ghost generate-jwt`.\n\n**Content API alternative**: for read-only public-published content, the simpler **Content API** uses a single key as a query parameter — no JWT. Switch baseUrl to `/ghost/api/content` and use a Content API key.\n\n**Post status**: draft, published, scheduled, sent.\n\n**Mobiledoc vs Lexical**: Ghost stores post content in either format. Modern Ghost (v5+) defaults to Lexical (`lexical` field). Set `html` on writes — Ghost converts to its internal format.\n\n**Pagination**: `?page=N&limit=M` (max 100 for posts/pages, 15 for some). Response has `meta.pagination`.\n\n**Webhooks** out of scope.\n\n**Out of scope here**: themes, settings, redirects management, oEmbed.","region":"intl","category":"publishing","icon":"ghost","docsUrl":"https://ghost.org/docs/admin-api/","requiredEnvVars":["GHOST_ADMIN_API_URL","GHOST_ADMIN_JWT"],"toolCount":12,"authType":"API_KEY"},{"slug":"gitbook","name":"GitBook","description":"Drive GitBook (docs platform) from any AI agent: spaces, pages, content, search, collections. 9 tools, Bearer auth.","instructions":"This connector uses the GitBook API v1 (developer.gitbook.com).\n\n**Setup**:\n1. Sign in to https://app.gitbook.com → bottom-left avatar → **Settings → Developer → Personal access tokens → Create new token**.\n2. Copy the token. Set `GITBOOK_API_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${GITBOOK_API_TOKEN}`.\n\n**Hierarchy**: Organization → Collection → Space → Page (a tree of pages, sub-pages, content).\n\n**Space IDs**: each space has a UUID-like ID. Discover via `gitbook_list_spaces`.\n\n**Pages**: content lives in pages. Each page has id, slug, title, type (document, group, link), revision_id (every change creates a new revision).\n\n**Content format**: GitBook stores content as a JSON document tree (their own AST). Reading is straightforward; writing requires constructing the AST — out of scope for most agent use. For simple writes, use 'GitBook content imports' (markdown imports) — exposed as `gitbook_import_markdown_to_page`.\n\n**Search**: full-text across spaces.\n\n**Pagination**: `?page=N&limit=M` (max 100).\n\n**Out of scope here**: content editing via the AST, change requests, revisions diff, custom domains, integrations management.","region":"intl","category":"knowledge","icon":"gitbook","docsUrl":"https://developer.gitbook.com/","requiredEnvVars":["GITBOOK_API_TOKEN"],"toolCount":9,"authType":"BEARER_TOKEN"},{"slug":"gocardless","name":"GoCardless","description":"Manage GoCardless (direct-debit payment processing: customers, mandates, payments, subscriptions, payouts, refunds) from any AI agent. 10 tools, Bearer token.","instructions":"This connector wraps the GoCardless API (per-environment).\n\n**Setup**:\n1. Sign in at https://manage.gocardless.com → top-right avatar → **Developers → API access → Create**.\n2. Pick environment: `api.gocardless.com` (live) or `api-sandbox.gocardless.com` (sandbox).\n3. Set `GOCARDLESS_ACCESS_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${GOCARDLESS_ACCESS_TOKEN}` + `GoCardless-Version: 2015-07-06` (required).\n\n**Entity model**: `Customer → BankAccount → Mandate → Payment(s)` and/or `Subscription → recurring Payments`. Once a mandate is active you can charge it.\n\n**Idempotency keys**: write endpoints accept an `Idempotency-Key` header to safely retry. Best practice: pass a UUID per logical operation.\n\n**Pagination**: cursor-based via `before` / `after` query params. `limit` (max 500).\n\n**Rate limits**: 1000 req/min per token. 429 with `Retry-After`.\n\n**Out of scope here**: bank-account verification, mandate import via CSV, customer-notification webhooks setup, the Connect (partner OAuth) flow.","region":"intl","category":"payments","icon":"gocardless","docsUrl":"https://developer.gocardless.com/api-reference/","requiredEnvVars":["GOCARDLESS_ACCESS_TOKEN"],"toolCount":10,"authType":"BEARER_TOKEN"},{"slug":"gorgias","name":"Gorgias","description":"Manage Gorgias (e-commerce helpdesk) tickets, messages, customers, integrations from any AI agent. 10 tools, basic-auth.","instructions":"This connector wraps the Gorgias REST API (per-subdomain).\n\n**Setup**:\n1. Log into your Gorgias dashboard at https://YOUR_SUBDOMAIN.gorgias.com → **Settings → REST API**.\n2. Click **Add new API Key**. The page shows your **email** (the account email) and a freshly-generated **API key**.\n3. Set `GORGIAS_SUBDOMAIN` (just the subdomain part, e.g. `mystore`), `GORGIAS_EMAIL`, `GORGIAS_API_KEY`.\n\n**Authentication**: HTTP Basic with `username = ${GORGIAS_EMAIL}` and `password = ${GORGIAS_API_KEY}`. The adapter wires this via BASIC_AUTH.\n\n**Per-tenant baseUrl**: Gorgias is hosted per-subdomain — `https://${GORGIAS_SUBDOMAIN}.gorgias.com/api`. baseUrl uses {{}} substitution at import time.\n\n**Ticket model**: `Ticket → Messages[]`. A ticket is a conversation thread with a customer; each message is one inbound/outbound email/chat/SMS. To reply, POST a new message to the ticket; to close, PUT the ticket with `status: 'closed'`.\n\n**Channels**: Gorgias unifies email, chat, SMS, Instagram DM, Facebook DM, Shopify, voice. `via` field on each message identifies the channel.\n\n**Pagination**: cursor-based. List endpoints return `meta.next_cursor` and `meta.previous_cursor`. Use `cursor` query param for the next page; `limit` controls page size (max 100).\n\n**Search**: the `tickets` endpoint accepts `view_id` to filter by saved view, and various direct filters. For more complex queries use the dedicated `/views/{id}/items` endpoint.\n\n**Rate limits**: 40 req/s per account; 2 concurrent connections. 429 returns `Retry-After` in seconds.\n\n**Out of scope here**: macro CRUD beyond list, rule management, satisfaction surveys, voice call orchestration.","region":"intl","category":"support","icon":"gorgias","docsUrl":"https://developers.gorgias.com/reference/introduction","requiredEnvVars":["GORGIAS_SUBDOMAIN","GORGIAS_EMAIL","GORGIAS_API_KEY"],"toolCount":10,"authType":"BASIC_AUTH"},{"slug":"greenhouse","name":"Greenhouse","description":"Manage Greenhouse (ATS recruiting: candidates, applications, jobs, scorecards, offers) from any AI agent. 10 tools, basic-auth.","instructions":"This connector wraps the Greenhouse Harvest API v1 (harvest.greenhouse.io/v1).\n\n**Setup**:\n1. In Greenhouse → **⚙️ Configure → Dev Center → API Credential Management → Create New API Key**.\n2. Type: **Harvest**. Permissions: pick what you need (read candidates/applications/jobs minimum; write for create endpoints).\n3. Set `GREENHOUSE_API_KEY`.\n\n**Authentication**: HTTP Basic — API key as username, empty password.\n\n**On-Behalf-Of header**: write endpoints REQUIRE `On-Behalf-Of: <user_id>` to attribute the action to a specific Greenhouse user. Pass `on_behalf_of` parameter when writing.\n\n**Candidate model**: a `Candidate` is the person; an `Application` is their candidacy to a specific Job. One candidate can have many applications. Scorecards, interviews, and offers all hang off Application.\n\n**Pagination**: `per_page` (max 500) + `page` (1-based). Total pages in `Link` header.\n\n**Rate limits**: 50 req/10s per API key. 429 with `Retry-After`.\n\n**Out of scope here**: candidate-survey responses, EEOC fields beyond list, custom-org chart navigation, the separate Partner / Job Board / Onboarding APIs (each have their own keys).","region":"intl","category":"hr","icon":"greenhouse","docsUrl":"https://developers.greenhouse.io/harvest.html","requiredEnvVars":["GREENHOUSE_API_KEY"],"toolCount":10,"authType":"BASIC_AUTH"},{"slug":"hackernews","name":"Hacker News","description":"Read Hacker News (stories, comments, users, top/new/best/ask/show/job lists) from any AI agent via the official Firebase API. 8 tools, no auth.","instructions":"This connector wraps the official Hacker News API hosted on Firebase (hacker-news.firebaseio.com).\n\n**Setup**: nothing. The API is public, read-only, and unauthenticated.\n\n**No write access**: the official API is READ-ONLY. There is no way to post stories, comments, or vote via this connector — those require a session cookie obtained by submitting an HTML login form to news.ycombinator.com, which is out of scope for an MCP adapter.\n\n**Two-step pattern**: list endpoints return arrays of integer IDs only (e.g. top 500 story IDs). You must then fetch each ID via `hackernews_get_item` to get the actual title/url/text/score. Plan accordingly — fetching 500 top stories means 501 requests.\n\n**Item types**: `story`, `comment`, `job`, `poll`, `pollopt`. Each has different fields — comments have `parent` + `text`, stories have `title` + `url` (or `text` for Ask HN), jobs have `title` + `url` + `text`.\n\n**Comment trees**: comments are a tree via `kids` (array of IDs) on each item. Walk recursively, watch for `deleted: true` or `dead: true` entries.\n\n**Rate limits**: no published limit, but Firebase will throttle aggressive clients. Stay under ~30 req/s and you'll be fine.\n\n**Cache friendly**: every item is content-addressable by ID and immutable once posted (votes update but story body doesn't). Long TTLs work well.\n\n**Out of scope here**: HN Algolia full-text search (different API at hn.algolia.com — could be a separate adapter), write/vote, email subscription.","region":"intl","category":"data","icon":"hackernews","docsUrl":"https://github.com/HackerNews/API","requiredEnvVars":[],"toolCount":8,"authType":"NONE"},{"slug":"harvest","name":"Harvest","description":"Manage Harvest (time tracking, projects, clients, invoices, expenses) from any AI agent. 10 tools, Bearer auth with account-ID header.","instructions":"This connector wraps the Harvest API v2 (api.harvestapp.com/v2).\n\n**Setup**:\n1. Log into https://id.getharvest.com → bottom-left avatar → **Developers → Create new personal access token**.\n2. Copy the **token** and the **Account ID** shown on the same page (a 7-digit number like `1234567`).\n3. Set both: `HARVEST_ACCESS_TOKEN` and `HARVEST_ACCOUNT_ID`.\n\n**Authentication**: every request requires BOTH:\n- `Authorization: Bearer ${HARVEST_ACCESS_TOKEN}`\n- `Harvest-Account-Id: ${HARVEST_ACCOUNT_ID}`\n- A `User-Agent` header (Harvest API requires it — the adapter sets `AnythingMCP (support@anythingmcp.com)`).\n\nMissing the account header returns `401 Unauthorized` even with a valid token — confusing but documented.\n\n**Hierarchy**: `Client → Project → Task assignment → Time entry`. To log time, you need the project ID + task ID. List projects to find IDs.\n\n**Dates** are ISO 8601 (`2026-05-20`). `spent_date` on a time entry is required.\n\n**Pagination**: `page` (1-based) + `per_page` (max 100). Total in `total_pages`.\n\n**Rate limits**: 100 req / 15s per account; 1k req / 15s globally per token. 429 returns no Retry-After — back off 15s.\n\n**Out of scope here**: invoice line CRUD beyond list/get, estimates, contacts, expenses categories management, recurring schedules.","region":"intl","category":"time-tracking","icon":"harvest","docsUrl":"https://help.getharvest.com/api-v2/","requiredEnvVars":["HARVEST_ACCESS_TOKEN","HARVEST_ACCOUNT_ID"],"toolCount":10,"authType":"BEARER_TOKEN"},{"slug":"heap","name":"Heap","description":"Send events, identify users and update properties in Heap (product analytics) from any AI agent. 5 tools, app_id-based auth.","instructions":"This connector uses the Heap Server-Side API (developers.heap.io/docs/server-side-apis).\n\n**Setup**:\n1. Sign in to https://app.heap.io → top-right → **Account → Projects → select project → Project ID** (called `app_id`).\n2. Set `HEAP_APP_ID` to the numeric app/project ID.\n\n**Authentication**: NONE — Heap's server-side API uses the app_id in the request body to route events to your project. There's no secret on the ingestion endpoint (anyone with your app_id can fake events — same trust model as Google Analytics client-side JS).\n\n**identity vs user_id**: every event references a user via `identity` (a stable string you control — typically your user's UUID or email). Heap merges anonymous sessions to identified users on first identify call with the same identity.\n\n**Property types**: properties (event-level OR user-level) are arbitrary key-value pairs. Max 1024 properties per event, max 1MB total request size.\n\n**Out of scope here**: Read APIs (the Heap Read API requires a separate auth and is gated to higher plans), funnel/segment queries, account/billing.","region":"intl","category":"analytics","icon":"heap","docsUrl":"https://developers.heap.io/reference/server-side-apis-overview","requiredEnvVars":["HEAP_APP_ID"],"toolCount":5,"authType":"NONE"},{"slug":"height","name":"Height","description":"Drive Height (modern AI-native project management) from any AI agent: tasks, lists, fields, users, activities. 9 tools, API-key Bearer auth.","instructions":"This connector uses the Height API v1 (height.app/api/docs).\n\n**Setup**:\n1. Sign in to Height → top-right avatar → **Settings → API & webhooks → Generate API key**.\n2. Set `HEIGHT_API_KEY`.\n\n**Authentication**: `Authorization: api-key ${HEIGHT_API_KEY}` (literal `api-key ` prefix, NOT `Bearer`).\n\n**Tasks** are the primary object. Each task has status, name, description, assignees, dueDate, listIds[], fields (custom), parentTaskId (for subtasks).\n\n**Lists**: how tasks are organized (similar to ClickUp lists or Linear projects). A task can belong to multiple lists.\n\n**Custom fields**: defined at the workspace level. Reference via fields object {fieldId: value}.\n\n**Pagination**: cursor-based via `?cursor=...`.\n\n**Out of scope here**: chat, video huddles, integrations management.","region":"intl","category":"project-management","icon":"height","docsUrl":"https://height.app/api/docs","requiredEnvVars":["HEIGHT_API_KEY"],"toolCount":9,"authType":"API_KEY"},{"slug":"help-scout","name":"Help Scout","description":"Drive Help Scout (shared inbox + helpdesk) from any AI agent: conversations, customers, mailboxes, tags, threads. 13 tools, OAuth2 Bearer auth.","instructions":"This connector uses the Help Scout Mailbox API v2 (developer.helpscout.com/mailbox-api).\n\n**Setup**:\n1. Sign in to Help Scout → **Manage → Apps → My Apps → Create My App**.\n2. Pick app type:\n   - **Personal Access Token** (single-user): get a token from your profile → API Keys → Personal Access Token. Token expires after 2 days — refresh needed.\n   - **OAuth2 App** (multi-user / longer-lived): standard OAuth2 client-credentials or auth-code flow.\n3. Set `HELPSCOUT_ACCESS_TOKEN` to the access token.\n\n**Authentication**: `Authorization: Bearer ${HELPSCOUT_ACCESS_TOKEN}`. Tokens expire — your orchestrator handles refresh.\n\n**Conversations are central**: Help Scout calls tickets 'conversations'. They live in mailboxes. Each has customer (the requester), assignee, status (active/pending/closed/spam), threads (replies/notes).\n\n**Thread types**: customer (inbound from customer), reply (outbound public), note (internal), forward (forwarded by agent), phone (logged call), chat (live-chat).\n\n**Status values**: active, pending (snoozed), closed, spam, open (legacy). Use 'closed' to resolve.\n\n**HAL+JSON**: responses follow the HAL spec — `_embedded` contains nested collections, `_links` for navigation. Pagination via `?page=N&size=M` (max 50).\n\n**Custom fields**: each mailbox has its own custom fields. Set them via `customFields` array in conversation create/update.\n\n**Rate limits**: 400 req/min per API key. On 429 back off.\n\n**Out of scope here**: Docs (separate Help Scout Docs API), Beacon, Reports analytics endpoints, webhooks management.","region":"intl","category":"support","icon":"helpscout","docsUrl":"https://developer.helpscout.com/mailbox-api/","requiredEnvVars":["HELPSCOUT_ACCESS_TOKEN"],"toolCount":13,"authType":"BEARER_TOKEN"},{"slug":"hunter","name":"Hunter.io","description":"Find and verify email addresses via Hunter.io. 7 tools for domain search, email finder, email verifier, account stats. Bearer-token / query-key auth.","instructions":"This connector uses the Hunter.io API v2 (hunter.io/api-documentation/v2).\n\n**Setup**:\n1. Sign in to https://hunter.io → top-right avatar → **API → API Keys**.\n2. Copy the key. Set `HUNTER_API_KEY`.\n\n**Authentication**: query-string `?api_key=...` on every call (QUERY_AUTH). Hunter also accepts the API key in an `X-API-Key` header but query-string is the documented default.\n\n**Credits model**: every request consumes credits per your plan. `domain_search` is the most expensive (returns up to 100 emails per call); `email_verifier` and `email_finder` are 1 credit each. `email_count` and `account` are FREE (don't deduct).\n\n**Confidence scores**: every email returned has a `confidence` 0-100 — Hunter's estimate of deliverability. >90 = reliable, 50-90 = use with care, <50 = high bounce risk.\n\n**Verifier vs Finder**:\n  - `email_verifier`: 'is this email deliverable?' — returns status (valid/invalid/accept_all/disposable/webmail/unknown).\n  - `email_finder`: 'find the email for this person at this company' — returns the most-likely email pattern with confidence.\n\n**Out of scope here**: Hunter Campaigns (their cold-email product), Leads (CRM-lite), webhooks.","region":"intl","category":"enrichment","icon":"hunter","docsUrl":"https://hunter.io/api-documentation/v2","requiredEnvVars":["HUNTER_API_KEY"],"toolCount":7,"authType":"QUERY_AUTH"},{"slug":"insightly","name":"Insightly","description":"Drive Insightly (CRM + project management) from any AI agent: contacts, organisations, leads, opportunities, projects, tasks. 12 tools, Basic auth.","instructions":"This connector uses the Insightly REST API v3.1 (api.insightly.com/v3.1).\n\n**Setup**:\n1. Sign in to Insightly → bottom-left avatar → **User Settings → API Key**.\n2. Copy the key. Set `INSIGHTLY_API_KEY`.\n3. Note the **API URL pod** — visible in the same screen as the API key (e.g. `api.na1.insightly.com` for North America #1). Set `INSIGHTLY_POD` (just the pod part, e.g. `na1`, `eu2`).\n\n**Authentication**: HTTP Basic with username=API_KEY, password=empty.\n\n**Pod-specific URL**: `https://api.{{INSIGHTLY_POD}}.insightly.com/v3.1`. Wrong pod → 404.\n\n**Lead vs Contact**: Insightly has both. Leads are unqualified (no opportunity yet); contacts are people in opportunities or just relationships.\n\n**Custom fields**: stored under `CUSTOMFIELDS` array of `{FIELD_NAME, FIELD_VALUE, CUSTOM_FIELD_ID}`.\n\n**Pipeline / Stage IDs**: opportunities live in pipelines with stages. Discover via `insightly_list_pipelines` + `insightly_list_pipeline_stages`.\n\n**Pagination**: `?skip=N&top=M` (max 500 per page).\n\n**Out of scope here**: emails CRUD, tasks recurrence, file attachments, custom-object schemas, project templates.","region":"intl","category":"crm","icon":"insightly","docsUrl":"https://api.insightly.com/v3.1/Help","requiredEnvVars":["INSIGHTLY_API_KEY","INSIGHTLY_POD"],"toolCount":12,"authType":"BASIC_AUTH"},{"slug":"instantly","name":"Instantly","description":"Drive Instantly (cold-email outreach platform) from any AI agent: leads, campaigns, lead lists, accounts (sending mailboxes). 8 tools, Bearer auth.","instructions":"This connector uses the Instantly v2 API (developer.instantly.ai).\n\n**Setup**:\n1. Sign in to https://app.instantly.ai → bottom-left avatar → **Settings → Integrations → API → Generate New API Key**.\n2. Set `INSTANTLY_API_KEY`.\n\n**Authentication**: `Authorization: Bearer ${INSTANTLY_API_KEY}`.\n\n**Lead state**: leads have status (Active, Paused, Completed, Unsubscribed, Bounced, Skipped, Replied). Adding a lead with `skip_if_in_workspace=true` deduplicates.\n\n**Campaigns**: sequence of email steps. Adding a lead to a campaign enrolls it in the sequence.\n\n**Accounts (sending mailboxes)**: each campaign sends from one or more connected mailboxes — managed in UI.\n\n**Pagination**: `?starting_after=lead_id` cursor.\n\n**Out of scope here**: campaign content editing (UI-only), unibox conversations API (separate), warmup management.","region":"intl","category":"crm","icon":"instantly","docsUrl":"https://developer.instantly.ai/","requiredEnvVars":["INSTANTLY_API_KEY"],"toolCount":8,"authType":"BEARER_TOKEN"},{"slug":"invoiced","name":"Invoiced","description":"Manage Invoiced (A/R automation: customers, invoices, payments, subscriptions, credit notes) from any AI agent. 9 tools, basic-auth.","instructions":"This connector wraps the Invoiced REST API (api.invoiced.com).\n\n**Setup**:\n1. Log into https://app.invoiced.com → **Developers → API Keys → Create API Key**.\n2. Set `INVOICED_API_KEY`.\n3. **Sandbox**: for testing, point baseUrl at `https://api.sandbox.invoiced.com` instead.\n\n**Authentication**: HTTP Basic — API key as username, empty password.\n\n**Hierarchy**: `Customer → Invoice → Line items → Payments`. Subscriptions generate recurring invoices automatically.\n\n**Pagination**: cursor-based via `Link` headers. Use `per_page` (max 100) and `page` (1-based).\n\n**Rate limits**: 60 req/min per API key, 1k/hr. 429 with `Retry-After`.\n\n**Out of scope here**: chasing workflow editor, payment-processor setup, dunning emails template management.","region":"intl","category":"accounting","icon":"invoiced","docsUrl":"https://invoiced.com/api","requiredEnvVars":["INVOICED_API_KEY"],"toolCount":9,"authType":"BASIC_AUTH"},{"slug":"kashflow","name":"KashFlow","description":"Manage KashFlow (UK accounting) customers, suppliers, invoices, receipts, products via SOAP envelope from any AI agent. 8 tools, embedded-auth.","instructions":"This connector wraps the KashFlow REST API (securedwebapp.com/api).\n\n**Setup**:\n1. Log into https://securedwebapp.com → **Settings → API → Enable API access**.\n2. Note your Username + API password (separate from your login password).\n3. Set `KASHFLOW_USERNAME` and `KASHFLOW_PASSWORD`.\n\n**Authentication**: KashFlow uses a REST API with username + password in the URL path: `/api/v2/{username}/{password}/<endpoint>`. The adapter substitutes both via runtime envVars — the credentials never appear in query string or body.\n\n**API surface**: KashFlow exposes only a slim subset of the SOAP API as REST: customers, suppliers, invoices (CRUD), receipts, products. For features missing here (nominal codes, journals, projects) you'd need to call the SOAP endpoint directly — out of scope.\n\n**Pagination**: most list endpoints return a max of 100; pass `from` / `to` IDs to page.\n\n**Rate limits**: 60 req/min per account. 429 → back off 1s.\n\n**Out of scope here**: payroll, CIS, mileage logs, batch journals.","region":"intl","category":"accounting","icon":"kashflow","docsUrl":"https://www.kashflow.com/developers/","requiredEnvVars":["KASHFLOW_USERNAME","KASHFLOW_PASSWORD"],"toolCount":8,"authType":"NONE"},{"slug":"klaviyo","name":"Klaviyo","description":"Drive Klaviyo (e-commerce email + SMS) from any AI agent: profiles, lists, segments, events tracking, flows, campaigns, catalogs. 14 tools targeting the modern 2024+ API.","instructions":"This connector uses the Klaviyo REST API revision **2024-10-15** (current stable).\n\n**Setup**:\n1. Sign in to Klaviyo → bottom-left avatar → **Settings → API Keys → Create Private API Key**.\n2. Set scopes — at minimum: Profiles (Full), Lists (Full), Segments (Read), Events (Full), Catalogs (Read), Campaigns (Read), Flows (Read).\n3. Copy the key. It's prefixed with `pk_`. Set `KLAVIYO_PRIVATE_API_KEY`.\n\n**Authentication**: `Authorization: Klaviyo-API-Key ${KLAVIYO_PRIVATE_API_KEY}` (the literal prefix is `Klaviyo-API-Key`, NOT `Bearer`). The adapter sets this via API_KEY + custom apiKey value.\n\n**Revision header**: every request MUST include `revision: 2024-10-15`. The adapter pins this in `connector.headers`. If you upgrade revision, expect breaking changes — read https://developers.klaviyo.com/en/docs/api_versioning_and_deprecation_policy.\n\n**JSON:API spec**: Klaviyo follows JSON:API for resource shape. Every response: `{data: {id, type, attributes, relationships}, links, meta}`. Use `?include=` (comma-separated) to side-load related resources in one call.\n\n**Filtering syntax**: Klaviyo uses a custom filter DSL on most list endpoints. Example: `?filter=equals(properties,{'$source':'newsletter'})` or `?filter=greater-than(created,2025-01-01T00:00:00Z)`. The adapter exposes common filters as explicit query params.\n\n**Profile model**: Klaviyo's central object. Each profile has `email`, `phone_number`, `external_id`, plus arbitrary `properties` (custom fields). Profiles are upserted by email/phone/external_id — you cannot have duplicates on the same identifier.\n\n**Events**: the heart of Klaviyo's behavioral targeting. Send events via `klaviyo_create_event` with a profile identifier + a metric name (e.g. 'Placed Order') + properties. Klaviyo automatically creates the metric if it doesn't exist. Events drive flows (triggered automations) — sending the right events at the right time is 80% of Klaviyo work.\n\n**Pagination**: cursor-based via `page[cursor]` (response includes `links.next` with the cursor). `page[size]` is typically 20 default, 100 max.\n\n**Lists vs Segments**: lists are static (manually-managed subscribers). Segments are dynamic queries (recompute every few minutes). Use lists for opt-in newsletters, segments for behavioral cohorts ('opened a campaign in last 30 days').\n\n**Rate limits**: vary per endpoint. Profile reads: 75/sec burst, 700/min steady. Profile writes: 150/min. Klaviyo returns `429` with `Retry-After` — honor it.\n\n**Webhooks** out of scope (use Klaviyo's UI to configure event webhooks to your hosted endpoint).\n\n**Out of scope here**: sending individual emails via the legacy track/identify endpoints (use the Events API + flows instead), template editing, image library, reviews, the older v1/v2 REST API.","region":"intl","category":"marketing-automation","icon":"klaviyo","docsUrl":"https://developers.klaviyo.com/en/reference/api_overview","requiredEnvVars":["KLAVIYO_PRIVATE_API_KEY"],"toolCount":14,"authType":"API_KEY"},{"slug":"kustomer","name":"Kustomer","description":"Drive Kustomer (modern customer service CRM, Meta-owned) from any AI agent: conversations, messages, customers, notes, custom objects. 10 tools, Bearer auth.","instructions":"This connector uses the Kustomer API v1 (developer.kustomer.com).\n\n**Setup**:\n1. Sign in to Kustomer → top-right avatar → **Settings → Security → API Keys → Add API Key**.\n2. Pick role: org.permission.customer.read+write, org.permission.conversation.read+write, etc.\n3. Set `KUSTOMER_API_KEY`.\n4. Note your **org subdomain** (e.g. `acme` for `acme.kustomerapp.com`). Set `KUSTOMER_SUBDOMAIN`.\n\n**Authentication**: `Authorization: Bearer ${KUSTOMER_API_KEY}`.\n\n**Subdomain-templated URL**: `https://${KUSTOMER_SUBDOMAIN}.api.kustomerapp.com/v1`.\n\n**Customer-centric model**: Kustomer's selling point is the unified customer timeline. A customer has multiple emails/phones/social handles; conversations roll up under the customer.\n\n**JSON:API conventions**: requests/responses follow JSON:API. Use `?include=` to side-load.\n\n**Pagination**: `?page[size]=N&page[number]=M`.\n\n**Out of scope here**: workflows/automations editing, KSAT (CSAT survey) config, knowledge base.","region":"intl","category":"support","icon":"kustomer","docsUrl":"https://developer.kustomer.com/kustomer-api-docs/reference","requiredEnvVars":["KUSTOMER_API_KEY","KUSTOMER_SUBDOMAIN"],"toolCount":10,"authType":"BEARER_TOKEN"},{"slug":"lemlist","name":"Lemlist","description":"Drive Lemlist (cold email + multichannel outreach) from any AI agent: campaigns, leads (in-campaign prospects), team members, hooks. 11 tools, API-key Basic auth.","instructions":"This connector uses the Lemlist API v1 (developer.lemlist.com).\n\n**Setup**:\n1. Sign in to Lemlist → top-right avatar → **Settings → Integrations → API → Get my API key**.\n2. Copy the key. Set `LEMLIST_API_KEY`.\n\n**Authentication**: HTTP Basic Auth — `Authorization: Basic base64('':${LEMLIST_API_KEY})` — username is empty, password is the API key. (Yes, swapped from the usual: empty username, key as password.) The adapter handles this via BASIC_AUTH with username='' and password=key.\n\n**Campaign model**: Lemlist's central unit. A campaign has a sequence of steps (email + waits + LinkedIn touches). You add **leads** (prospects) to a campaign — the campaign then drips touchpoints to each lead.\n\n**Lead state**: a lead in a campaign has status (active/paused/replied/bounced/unsubscribed/completed). New leads default to active and start receiving the campaign's first step.\n\n**Custom variables**: leads support arbitrary key/value pairs (e.g. `{firstName:'Jane', icebreaker:'...'}`) — referenced as `{{firstName}}` in the campaign emails. Lemlist's selling point is dynamic-personalization with image overlays driven by these variables.\n\n**Email accounts**: each campaign sends from a connected email account (Gmail, Outlook, custom SMTP). Configured in UI; the API doesn't expose connection management.\n\n**Pagination**: `limit` (default 100, max 100) + `offset`. Some endpoints return arrays without paging metadata — assume more if you get exactly `limit` items back.\n\n**Out of scope here**: campaign creation (the step-builder is UI-only), team analytics, hook editing (configured via Lemlist's UI), Lemlist Chrome extension actions.","region":"intl","category":"crm","icon":"lemlist","docsUrl":"https://developer.lemlist.com/","requiredEnvVars":["LEMLIST_API_KEY"],"toolCount":11,"authType":"BASIC_AUTH"},{"slug":"lemonsqueezy","name":"Lemon Squeezy","description":"Read and act on Lemon Squeezy commerce data — orders, subscriptions, customers, products, variants, license keys, discounts, payouts — from any AI agent. 14 tools, Bearer auth. JSON:API spec compliant.","instructions":"This connector uses the Lemon Squeezy API v1.\n\n**Setup**:\n1. Sign in to https://app.lemonsqueezy.com → **Settings → API → + Create API key**.\n2. Name it ('AnythingMCP'), select the store this key acts on (or 'All stores' if you have multiple).\n3. Copy the key. It's prefixed with `eyJ...` (it's a JWT, but treat as opaque). Set `LEMONSQUEEZY_API_KEY`.\n\n**Authentication**: `Authorization: Bearer ${LEMONSQUEEZY_API_KEY}` + `Accept: application/vnd.api+json` (the adapter sets the Accept header automatically per endpoint).\n\n**JSON:API conventions**: every response wraps data in `{data: ..., meta: {page: {...}}, links: {...}}`. Each resource has `id`, `type`, `attributes`, `relationships`. **Use `?include=` to side-load related resources** in one call — e.g. `?include=order-items,customer` on an order. Without `include`, the relationships only return IDs and require N+1 lookups.\n\n**Filtering**: `?filter[store_id]=NNN`, `?filter[status]=paid`, etc. The adapter exposes the most common filters per endpoint.\n\n**Pagination**: `?page[number]=N` and `?page[size]=M` (max 100). `meta.page.lastPage` tells you the total. \n\n**Mode (test vs live)**: every object has a `test_mode` boolean attribute. The same API key can act on either; mode is determined by the resource you reference (test resources are created when your store is in test mode).\n\n**Store IDs**: most resources scope to a store. Find your store_id via `lemonsqueezy_list_stores` once. If you only have one store, every list call defaults to it.\n\n**License keys** are a Lemon Squeezy first-class product type — useful for SaaS apps. The adapter exposes list + retrieve. Activation/deactivation lives at the public license-keys endpoint (different auth) and is intentionally out of scope here.\n\n**Webhooks** out of scope (configured in the UI and delivered to your hosted endpoint).\n\n**Rate limits**: 300 req/min per API key. On 429, back off. `Retry-After` header is set.\n\n**Out of scope here**: writes to products/variants/files (Lemon Squeezy is a curated marketplace and asks you to manage catalog via UI), checkout link creation (use the simpler hosted-checkout URL), affiliates, store theme.","region":"intl","category":"payments","icon":"lemonsqueezy","docsUrl":"https://docs.lemonsqueezy.com/api","requiredEnvVars":["LEMONSQUEEZY_API_KEY"],"toolCount":14,"authType":"BEARER_TOKEN"},{"slug":"less-annoying-crm","name":"Less Annoying CRM","description":"Manage Less Annoying CRM (contacts, companies, notes, tasks, pipelines) from any AI agent. 8 tools, dual-header API auth.","instructions":"This connector wraps the Less Annoying CRM API (api.lessannoyingcrm.com).\n\n**Setup**:\n1. Sign in to https://www.lessannoyingcrm.com → top-right avatar → **My Account → API → Create new API key**.\n2. Note both the `UserCode` (your LACRM user code) and the `API Token`.\n3. Set `LACRM_USER_CODE` and `LACRM_API_TOKEN`.\n\n**Authentication**: LACRM uses a POST-only API — every call is `POST /` with `UserCode`, `APIToken`, `Function` and `Parameters` (JSON-stringified) as form fields. The adapter wraps this so each tool exposes a normal interface and hides the unusual envelope.\n\n**Function dispatch**: every LACRM operation is a single `Function` name (`GetContact`, `CreateContact`, ...). Parameters go inside the `Parameters` form field as JSON.\n\n**Custom fields**: are returned/posted by their numeric `FieldId`. Use `GetCustomFields` to discover IDs first.\n\n**Pagination**: `Page` (1-based) on list functions; results are 25 per page (fixed).\n\n**Rate limits**: 300 req/min per API token. 429 with `Retry-After`.\n\n**Out of scope here**: workflow automation (LACRM is intentionally minimal), email tracking, calendar sync.","region":"intl","category":"crm","icon":"less-annoying-crm","docsUrl":"https://www.lessannoyingcrm.com/help/category/63/14/api","requiredEnvVars":["LACRM_USER_CODE","LACRM_API_TOKEN"],"toolCount":8,"authType":"NONE"},{"slug":"lever","name":"Lever","description":"Manage Lever ATS (candidates, opportunities, postings, stages, feedback) from any AI agent. 10 tools, basic-auth.","instructions":"This connector wraps the Lever Hire API v1 (api.lever.co/v1).\n\n**Setup**:\n1. In Lever → **Settings → Integrations and API → API Credentials → Generate new key**.\n2. Set `LEVER_API_KEY`.\n3. **Sandbox**: use `https://api.sandbox.lever.co/v1` instead during testing.\n\n**Authentication**: HTTP Basic — API key as username, empty password.\n\n**Opportunity vs Candidate**: in Lever's modern API, an `Opportunity` represents a candidate's interest in a single posting. A person can have multiple opportunities (one per role). The legacy `Candidate` endpoint still works but Opportunity is preferred.\n\n**Pagination**: cursor-based. List endpoints return `next` (cursor) in the response body; pass back as `offset`.\n\n**Rate limits**: 8 req/sec per API key. 429 with `Retry-After`.\n\n**Out of scope here**: requisitions CRUD beyond list, EEO survey responses, the separate Nurture / Sourcer extension APIs.","region":"intl","category":"hr","icon":"lever","docsUrl":"https://hire.lever.co/developer/documentation","requiredEnvVars":["LEVER_API_KEY"],"toolCount":10,"authType":"BASIC_AUTH"},{"slug":"linkedin","name":"LinkedIn","description":"Drive LinkedIn (profile + shared posts) for the authenticated user from any AI agent. Limited scope: most LinkedIn features require Marketing Developer Platform approval. 5 tools, OAuth2 Bearer auth.","instructions":"This connector uses the LinkedIn Marketing/Profile API v2 (learn.microsoft.com/en-us/linkedin/).\n\n**HEAVY GATING**: LinkedIn's API is one of the most restricted public APIs. Most useful endpoints (read posts, search profiles, fetch connections, manage company pages) require **Marketing Developer Platform approval** from LinkedIn — a partnership program with significant requirements (existing app + revenue commitments).\n\nWhat WORKS without partnership:\n  - 'Sign in with LinkedIn using OpenID Connect' product scopes: `openid`, `profile`, `email`, `w_member_social` (post on behalf of user).\n\n**Setup**:\n1. Register an app at https://www.linkedin.com/developers/apps.\n2. Add the **Sign In with LinkedIn using OpenID Connect** product.\n3. (Optional) Add **Share on LinkedIn** product for posting.\n4. Run OAuth2 authorization-code flow with scopes `openid profile email w_member_social`.\n5. Set `LINKEDIN_ACCESS_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${LINKEDIN_ACCESS_TOKEN}`.\n\n**LinkedIn-Version header**: required on most v2 endpoints: `LinkedIn-Version: 202405` (use the YYYYMM of the API version you're targeting). Without it many endpoints return 426 Upgrade Required.\n\n**Person URN**: shares are posted as `urn:li:person:{your_person_id}`. Get your person_id from the userinfo endpoint.\n\n**Out of scope here** (require Marketing Developer Platform): read other users' posts, search profiles, manage company pages, ad campaigns, analytics, posts inbox.","region":"intl","category":"social","icon":"linkedin","docsUrl":"https://learn.microsoft.com/en-us/linkedin/","requiredEnvVars":["LINKEDIN_ACCESS_TOKEN"],"toolCount":5,"authType":"BEARER_TOKEN"},{"slug":"loops","name":"Loops","description":"Send transactional emails, fire product events and manage contacts in Loops (the modern product-email tool for SaaS) from any AI agent. 9 tools, Bearer-token auth.","instructions":"This connector uses the Loops v1 REST API (https://loops.so/docs/api-reference).\n\n**Setup**:\n1. Sign in to https://app.loops.so → **Settings → API → Create API key**.\n2. Pick the scope: Public API (recommended for most use) or higher.\n3. Copy the key (prefixed). Set `LOOPS_API_KEY`.\n\n**Authentication**: `Authorization: Bearer ${LOOPS_API_KEY}`.\n\n**Mental model**: Loops is event-driven. You send `events` (like 'user.signed_up', 'subscription.upgraded'), and those events trigger `loops` (the email automations you build in the UI). For transactional sends (password reset, magic link), use `loops_send_transactional_email` with a pre-built transactional template ID.\n\n**Contacts**: identified by `email` (primary key). Use `userGroup` to bucket contacts (free / pro / churned). Custom properties via the `properties` object.\n\n**Transactional templates**: built in the Loops UI under **Transactional**. Each has a `transactionalId` (visible after publishing). Variables in the template (`{{firstName}}`) are filled from the `dataVariables` map on send.\n\n**Idempotency**: events can include an `eventName` + `idempotencyKey` — duplicate calls with the same idempotency key within 24h are deduped.\n\n**Rate limits**: 10 req/sec per API key for sends, higher for reads. On 429, back off.\n\n**Out of scope here**: campaign management (Loops campaigns are visual UI-only), audience filters, attribution reports.","region":"intl","category":"email","icon":"loops","docsUrl":"https://loops.so/docs/api-reference","requiredEnvVars":["LOOPS_API_KEY"],"toolCount":9,"authType":"BEARER_TOKEN"},{"slug":"magento","name":"Magento (Adobe Commerce)","description":"Drive Magento 2 / Adobe Commerce from any AI agent: products, categories, orders, customers, stock. 12 tools, Bearer admin-token auth, per-store base URL.","instructions":"This connector uses the Magento 2 REST API (devdocs.magento.com).\n\n**Setup**:\n1. As Magento admin → **System → Integrations → Add New Integration**.\n2. Name + email, then on the API tab pick scopes: at minimum Catalog (Products + Categories + Stock), Customers, Sales (Orders + Invoices + Shipments).\n3. **Activate** the integration → grant access. Magento generates an **Access Token** (this is the long-lived bearer token).\n4. Set:\n   - `MAGENTO_BASE_URL` = your storefront base URL (e.g. `https://shop.example.com`)\n   - `MAGENTO_ACCESS_TOKEN` = the integration access token\n   - Optionally `MAGENTO_STORE_VIEW` if you want a specific store view (default 'default' or use 'all')\n\n**Authentication**: `Authorization: Bearer ${MAGENTO_ACCESS_TOKEN}`.\n\n**Path prefix**: `/rest/{store_view}/V1/...`. The adapter uses `/rest/default/V1/` as default — if you need to target a different store view, replace baseUrl accordingly or pass `?storeCode=` (Magento accepts both).\n\n**Search criteria DSL**: Magento has a unique multi-key search syntax for list endpoints:\n```\n?searchCriteria[filter_groups][0][filters][0][field]=status\n&searchCriteria[filter_groups][0][filters][0][value]=1\n&searchCriteria[filter_groups][0][filters][0][condition_type]=eq\n&searchCriteria[pageSize]=20\n&searchCriteria[currentPage]=1\n```\nIt's verbose but powerful. The adapter exposes the most common filters as flat params and lets you pass arbitrary criteria via `searchCriteria_raw` for advanced cases.\n\n**SKU as primary key**: most product endpoints use SKU (not ID) in the URL: `/V1/products/{sku}`.\n\n**Rate limits**: not enforced by Magento core — depends on hosting. On 429 back off.\n\n**Out of scope here**: GraphQL endpoint (separate), Inventory MSI deep features, B2B/Commerce-only features (shared catalogs, company hierarchies), CMS pages/blocks, sales rules editing.","region":"intl","category":"e-commerce","icon":"magento","docsUrl":"https://devdocs.magento.com/guides/v2.4/rest/bk-rest.html","requiredEnvVars":["MAGENTO_BASE_URL","MAGENTO_ACCESS_TOKEN"],"toolCount":12,"authType":"BEARER_TOKEN"},{"slug":"mailchimp","name":"Mailchimp","description":"Drive Mailchimp's Marketing API from any AI agent: audiences (lists), members, tags, campaigns, templates, segments and account info. 16 ready-to-use tools. Bearer-token auth with a datacenter-prefixed base URL.","instructions":"This connector uses the Mailchimp Marketing API v3.0.\n\n**Datacenter-prefixed base URL** (Mailchimp-specific quirk): each account lives on a numbered datacenter — `us1`, `us2`, … `us21`, etc. — and the API URL embeds it: `https://us{N}.api.mailchimp.com/3.0`. The datacenter suffix is the last segment of your API key after the dash (so an API key with `-us6` at the end lives on `us6`). The adapter takes the datacenter as an env var `MAILCHIMP_DC` and substitutes it into the base URL — if you set the wrong DC you'll get 404 NotResolved errors.\n\n**Setup**:\n1. Sign in to Mailchimp → bottom-left avatar → **Profile → Extras → API keys → Create a key**.\n2. The key Mailchimp issues you looks roughly like `<32-hex-chars>-usN`. Whatever the suffix says (`-usN`) IS your datacenter.\n3. Set `MAILCHIMP_API_KEY` = the full key (including `-usN`); set `MAILCHIMP_DC` = `usN` (e.g. `us6`).\n\n**Authentication**: Bearer token. The engine sends `Authorization: Bearer ${MAILCHIMP_API_KEY}`. Mailchimp also supports HTTP Basic with `anystring:API_KEY` but Bearer is cleaner and equally valid since 2019.\n\n**Audience IDs vs list IDs**: Mailchimp renamed 'lists' to 'audiences' in the UI but the API still calls them `lists`. The `list_id` in URLs is a 10-character alphanumeric (e.g. `a1b2c3d4e5`) — find it via `mailchimp_list_audiences` once and pin it.\n\n**Member subscriber_hash**: members are addressed by the **MD5 hash of the lowercase email**, NOT the raw email. Most tools that operate on a member accept either the raw email OR the hash and the adapter passes whatever you give it — but Mailchimp returns 404 if you pass the original-case email when the lowercase hash is expected. Always lowercase email before hashing if you compute it yourself.\n\n**PUT vs POST**: Mailchimp uses **PUT to upsert** a member (creates if missing, updates if exists) — `mailchimp_upsert_member` does this. POST `/members` would error on duplicate. Stick with the adapter's upsert tool unless you specifically need to fail on duplicate.\n\n**Status values**: when subscribing a member, `status` must be `subscribed`, `unsubscribed`, `cleaned`, `pending` (double opt-in) or `transactional`. Use `subscribed` for direct opt-in, `pending` if the list requires double opt-in.\n\n**Tags**: tags on members are managed via a dedicated endpoint (`/members/{hash}/tags`) — `mailchimp_update_member_tags` accepts an array like `[{name: 'vip', status: 'active'}, {name: 'cold', status: 'inactive'}]`. Setting `active` adds the tag; `inactive` removes it.\n\n**Campaign workflow**: campaigns have 3 phases — create (`POST /campaigns`), set content (`PUT /campaigns/{id}/content` — not exposed here, use the Mailchimp UI for templating), then send (`POST /campaigns/{id}/actions/send`). For pure trigger-on-existing-campaign, just call `mailchimp_send_campaign` with the campaign ID.\n\n**Rate limits**: ~10 concurrent connections per user; daily caps scale with plan. On 429, back off.\n\n**Out of scope here**: webhooks, marketing automation journeys, e-commerce store sync, transactional email (use the separate Mandrill / Mailchimp Transactional API for that), file manager, conversations.","region":"intl","category":"email","icon":"mailchimp","docsUrl":"https://mailchimp.com/developer/marketing/api/","requiredEnvVars":["MAILCHIMP_API_KEY","MAILCHIMP_DC"],"toolCount":16,"authType":"BEARER_TOKEN"},{"slug":"mailerlite","name":"MailerLite","description":"Manage MailerLite (email marketing: subscribers, groups, campaigns, automations, fields) from any AI agent. 10 tools, Bearer token.","instructions":"This connector wraps the MailerLite API v2 (connect.mailerlite.com/api).\n\n**Setup**:\n1. Log into https://dashboard.mailerlite.com → bottom-left avatar → **Integrations → MailerLite API → Generate new token**.\n2. Pick scopes (read/write subscribers, groups, campaigns, fields, automations).\n3. Set `MAILERLITE_API_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${MAILERLITE_API_TOKEN}` + `Accept: application/json`.\n\n**Subscriber lifecycle**: every email becomes a `Subscriber` with status (active, unsubscribed, junk, unconfirmed, bounced). Adding the same email twice updates rather than duplicating.\n\n**Groups**: tags for segmentation. A subscriber can belong to many groups.\n\n**Pagination**: `cursor` style — response includes `links.next` with cursor URL. Use `cursor` query param to page. `limit` (max 100).\n\n**Rate limits**: 120 req/min per token (Free/Growing); 240/min on Advanced. 429 with `Retry-After`.\n\n**Out of scope here**: landing pages, popups, segment SQL builder, e-commerce attribution.","region":"intl","category":"email","icon":"mailerlite","docsUrl":"https://developers.mailerlite.com/docs/","requiredEnvVars":["MAILERLITE_API_TOKEN"],"toolCount":10,"authType":"BEARER_TOKEN"},{"slug":"mailshake","name":"Mailshake","description":"Drive Mailshake (cold email / sales engagement) from any AI agent: campaigns, recipients, leads, replies. 8 tools, Basic auth (API key as user).","instructions":"This connector uses the Mailshake API v1 (mailshake.com/api/v1).\n\n**Setup**:\n1. Sign in to https://mailshake.com → top-right avatar → **API Keys → Create API Key**.\n2. Set `MAILSHAKE_API_KEY`.\n\n**Authentication**: HTTP Basic with username=API_KEY, password=empty.\n\n**Campaign**: a sequence of email steps. Add recipients to a campaign → they start receiving emails on schedule.\n\n**Recipient state**: each recipient has a status (pending, sending, paused, finished, replied, bounced, unsubscribed).\n\n**Pagination**: `?perPage=N&cursor=...`.\n\n**Out of scope here**: campaign content editor (UI), team management, AI features, copy-A/B-testing config.","region":"intl","category":"crm","icon":"mailshake","docsUrl":"https://mailshake.com/api/v1/","requiredEnvVars":["MAILSHAKE_API_KEY"],"toolCount":8,"authType":"BASIC_AUTH"},{"slug":"mapbox","name":"Mapbox","description":"Drive Mapbox APIs (geocoding, directions, isochrones, matrix, tilequery) from any AI agent. 8 tools, access-token query auth.","instructions":"This connector uses Mapbox's various REST APIs (docs.mapbox.com/api/).\n\n**Setup**:\n1. Sign in to https://account.mapbox.com → **Access tokens → Create a token**.\n2. Pick scopes: usually `styles:read` + `fonts:read` + `geocoding` + `directions` + `matrix` + `isochrone` + `tilequery`.\n3. Copy the token (starts with `pk.`). Set `MAPBOX_ACCESS_TOKEN`.\n\n**Authentication**: query-string `?access_token=...`.\n\n**Coordinate convention** (Mapbox-specific): **longitude FIRST**, then latitude. The order is `lng,lat`, NOT `lat,lng` like Google Maps. Trip up on this and your results land in the wrong country.\n\n**Geocoding v6 (forward + reverse)** is now the default — uses `/search/geocode/v6/forward` and `/reverse`. v5 still works at `/geocoding/v5/mapbox.places/...` but is in maintenance.\n\n**Directions profiles**: driving, walking, cycling, driving-traffic (live traffic, premium tier).\n\n**Cost**: all Mapbox APIs have a generous free tier (50k geocoding/month, 100k directions/month). Beyond that, paid per request — check pricing page. Each API call counts as 1 'API hit'.\n\n**Out of scope here**: tile rendering (use Mapbox GL JS), uploads, custom datasets, navigation SDK.","region":"intl","category":"maps","icon":"mapbox","docsUrl":"https://docs.mapbox.com/api/","requiredEnvVars":["MAPBOX_ACCESS_TOKEN"],"toolCount":8,"authType":"QUERY_AUTH"},{"slug":"mastodon","name":"Mastodon","description":"Read & post on any Mastodon instance from any AI agent. 10 tools, Bearer token auth.","instructions":"This connector wraps the Mastodon REST API (any instance — set baseUrl to your instance).\n\n**Setup**:\n1. Pick your instance (e.g. `https://mastodon.social`, `https://fosstodon.org`, your self-hosted one).\n2. Log in → **Preferences → Development → New application**.\n3. Name it (e.g. 'mcp'). Scopes: `read`, `write`, `follow`, `push` — tick whatever your use case needs (don't over-grant).\n4. Save → copy the **Your access token** value (shown only once). This is a personal access token tied to your account.\n5. Set `MASTODON_INSTANCE_URL` (e.g. `https://mastodon.social`) and `MASTODON_ACCESS_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${MASTODON_ACCESS_TOKEN}` on every request.\n\n**Per-instance API**: Mastodon is federated — every instance hosts its own API. baseUrl is your home instance. To read posts from other instances, the API will federate transparently when you provide a status ID OR you can use the public timeline endpoints.\n\n**IDs are per-instance**: a status ID from mastodon.social is NOT the same as the same status on fosstodon.org (each instance assigns its own internal ID even if the status was federated). To look up cross-instance: use `mastodon_search` with the full URL.\n\n**Post (toot) limits**: most instances allow 500 characters; some configure more. Polls have separate rules.\n\n**Pagination**: cursor-based via Link headers (`max_id`, `min_id`, `since_id`). The adapter exposes `max_id` / `since_id` as parameters.\n\n**Visibility**: when posting, `visibility` is one of `public`, `unlisted`, `private` (followers-only), `direct` (mentioned-only). Default per-account.\n\n**Rate limits**: 300 req / 5min per token on most instances. 429 with `X-RateLimit-Reset` header.\n\n**Out of scope here**: image/video upload multipart (use the dedicated media endpoint with a separate flow), instance admin, lists CRUD, push subscriptions.","region":"intl","category":"social","icon":"mastodon","docsUrl":"https://docs.joinmastodon.org/api/","requiredEnvVars":["MASTODON_INSTANCE_URL","MASTODON_ACCESS_TOKEN"],"toolCount":10,"authType":"BEARER_TOKEN"},{"slug":"medium","name":"Medium","description":"Publish posts to Medium (your own profile or a publication) from any AI agent. 5 tools, integration-token Bearer auth.","instructions":"This connector uses the Medium API v1 (github.com/Medium/medium-api-docs).\n\n**Important — limited write API**: Medium's public API is **write-mostly** for the user that owns the integration token. There's no public read API for posts (Medium walked back most read endpoints in 2019). Use RSS or scraping for reads.\n\n**Setup**:\n1. Sign in to https://medium.com → top-right avatar → **Settings → Security and apps → Integration tokens → New integration token**.\n2. Name it ('AnythingMCP'). Copy the token.\n3. Set `MEDIUM_INTEGRATION_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${MEDIUM_INTEGRATION_TOKEN}`.\n\n**Publishing flow**: get your userId (`medium_me`) → create a post (`medium_create_post`) under your user OR a publication (`medium_create_post_under_publication`).\n\n**Content format**: 'html' or 'markdown'. publishStatus: 'public', 'draft', 'unlisted'.\n\n**Tags**: max 5 tags per post, each ≤25 chars.\n\n**Out of scope here**: read posts (no public API), comments, claps, notifications.","region":"intl","category":"publishing","icon":"medium","docsUrl":"https://github.com/Medium/medium-api-docs","requiredEnvVars":["MEDIUM_INTEGRATION_TOKEN"],"toolCount":5,"authType":"BEARER_TOKEN"},{"slug":"messagebird","name":"MessageBird (Bird)","description":"Drive MessageBird / Bird (multichannel CPaaS — SMS, voice, WhatsApp via Bird, RCS) from any AI agent. 8 tools, AccessKey header auth.","instructions":"This connector uses the MessageBird API v1 (developers.messagebird.com).\n\n**Note**: MessageBird rebranded to **Bird** in 2023 (bird.com). The API endpoints at rest.messagebird.com remain functional for existing customers as of 2025; new accounts may have different endpoint paths. Verify with your account dashboard.\n\n**Setup**:\n1. Sign in to https://dashboard.messagebird.com → **Developers → API access** → Live or Test → copy AccessKey.\n2. Set `MESSAGEBIRD_ACCESS_KEY`.\n\n**Authentication**: header `Authorization: AccessKey ${MESSAGEBIRD_ACCESS_KEY}` (literal 'AccessKey' prefix).\n\n**Recipients format**: international phone numbers WITHOUT the `+` sign. e.g. `31612345678` for the Netherlands.\n\n**Datacoding**: 'plain' (default GSM-7), 'unicode' (UCS-2, allows emoji but doubles cost), 'auto' (let MessageBird pick).\n\n**Originator**: your sender ID. Can be alphanumeric (max 11 chars, sender-name approach) or a phone number you own/lease.\n\n**Voice via API**: also possible (/calls endpoint) but call flows are complex — out of scope here for the MVP.\n\n**Rate limits**: ~100 SMS/sec on standard, much higher with dedicated routes. On 429 back off.","region":"intl","category":"messaging","icon":"messagebird","docsUrl":"https://developers.messagebird.com/api/","requiredEnvVars":["MESSAGEBIRD_ACCESS_KEY"],"toolCount":8,"authType":"API_KEY"},{"slug":"microsoft-bookings","name":"Microsoft Bookings","description":"Drive Microsoft Bookings (Microsoft 365 scheduling product) via the Graph API: businesses, services, staff, appointments, customers. 8 tools, OAuth2 Bearer auth.","instructions":"This connector uses the Microsoft Graph API v1.0 — Bookings endpoints (learn.microsoft.com/en-us/graph/api/resources/booking-api-overview).\n\n**Setup**:\n1. Register an Azure AD app at https://portal.azure.com → **App registrations → New registration**.\n2. **API permissions → Microsoft Graph → Delegated** (or Application) → add: `Bookings.Read.All`, `BookingsAppointment.ReadWrite.All` (write needs admin consent).\n3. Run OAuth2 authorization-code (or client-credentials) flow against `login.microsoftonline.com/{tenant}/oauth2/v2.0/token` to get an access token.\n4. Set `MICROSOFT_GRAPH_ACCESS_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${MICROSOFT_GRAPH_ACCESS_TOKEN}`.\n\n**Booking Business ID**: every Microsoft Bookings 'page' is a Booking Business. Discover them via `bookings_list_businesses`. The id looks like `Contoso@yourtenant.onmicrosoft.com` (an SMTP-like address, NOT a UUID).\n\n**Public booking endpoints**: most of Microsoft Bookings is private (admin-only). The public 'self-service' booking pages are at `https://outlook.office.com/owa/calendar/{biz_id}@{tenant}/bookings/` — out of scope; agents use the admin endpoints here.\n\n**Rate limits**: Graph throttling kicks in around 10k req per 10 min per app per user. On 429 honor Retry-After.\n\n**Out of scope here**: webhooks, custom questions per service, Microsoft Bookings staff scheduling rules.","region":"intl","category":"scheduling","icon":"microsoft-bookings","docsUrl":"https://learn.microsoft.com/en-us/graph/api/resources/booking-api-overview","requiredEnvVars":["MICROSOFT_GRAPH_ACCESS_TOKEN"],"toolCount":8,"authType":"BEARER_TOKEN"},{"slug":"microsoft-teams","name":"Microsoft Teams","description":"Drive Microsoft Teams (chat + collaboration) via the Graph API: teams, channels, messages, members. 9 tools, OAuth2 Bearer auth (Microsoft Graph).","instructions":"This connector uses the Microsoft Graph API v1.0 — Teams endpoints (learn.microsoft.com/en-us/graph/api/resources/teams-api-overview).\n\n**Setup**:\n1. Register an Azure AD app at https://portal.azure.com → **App registrations**.\n2. **API permissions → Microsoft Graph → Delegated** (or Application) → add: `Team.ReadBasic.All`, `Channel.ReadBasic.All`, `ChannelMessage.Send`, `ChannelMessage.Read.All` (write needs admin consent).\n3. Run OAuth2 to get an access token. Set `MICROSOFT_GRAPH_ACCESS_TOKEN` (shared with Microsoft Bookings adapter).\n\n**Authentication**: `Authorization: Bearer ${MICROSOFT_GRAPH_ACCESS_TOKEN}`.\n\n**Teams hierarchy**: Team → Channel → Message (+ replies). Each Team is also a Microsoft 365 Group.\n\n**Message content**: `body.contentType` is `text` or `html`. `body.content` is the message. Mentions go in `mentions[]` with `mentionText` matching the user's display name and `mentioned.user.id` set to their Azure AD user ID.\n\n**Pagination**: standard OData `@odata.nextLink` cursor.\n\n**Rate limits**: Graph throttling — ~10k req per 10 min per app per user. Teams-specific endpoints often have lower limits. On 429 honor Retry-After.\n\n**Out of scope here**: chat (DMs) beyond list, calls/meetings, apps installed in teams, shifts, planner.","region":"intl","category":"messaging","icon":"microsoft-teams","docsUrl":"https://learn.microsoft.com/en-us/graph/api/resources/teams-api-overview","requiredEnvVars":["MICROSOFT_GRAPH_ACCESS_TOKEN"],"toolCount":9,"authType":"BEARER_TOKEN"},{"slug":"mintlify","name":"Mintlify","description":"Trigger Mintlify documentation updates, query analytics, and manage assistant queries via the Mintlify API. 5 tools, Bearer-token auth.","instructions":"This connector uses the Mintlify API v1 (mintlify.com/docs/api-reference).\n\n**Setup**:\n1. Sign in to https://dashboard.mintlify.com → **Settings → API Keys → Create API key**.\n2. Copy the key (starts with `mint_`). Set `MINTLIFY_API_KEY`.\n\n**Authentication**: `Authorization: Bearer ${MINTLIFY_API_KEY}`.\n\n**Mintlify's API is scoped**: most write operations (trigger update, manage content) are not exposed because Mintlify expects content to live in a git repo and update on push. The API focuses on:\n  - Triggering re-deploys\n  - Querying assistant (chat) interactions\n  - Pulling analytics / search data\n\n**Out of scope here**: page/content CRUD (manage via the git repo), team management, OAuth user actions.","region":"intl","category":"publishing","icon":"mintlify","docsUrl":"https://mintlify.com/docs/api-reference","requiredEnvVars":["MINTLIFY_API_KEY"],"toolCount":5,"authType":"BEARER_TOKEN"},{"slug":"mollie","name":"Mollie","description":"Drive Mollie (EU-friendly payments) from any AI agent: payments, refunds, customers, subscriptions, mandates, methods. 14 tools, Bearer auth.","instructions":"This connector uses the Mollie API v2 (docs.mollie.com/reference).\n\n**Setup**:\n1. Sign in to https://my.mollie.com → **Developers → API keys**.\n2. Use a **test key** (`test_...`) for development, **live key** (`live_...`) for production.\n3. Set `MOLLIE_API_KEY` accordingly. (Mollie tells you which environment via the key prefix.)\n\n**Authentication**: `Authorization: Bearer ${MOLLIE_API_KEY}`.\n\n**Amount format**: every monetary amount is `{currency: 'EUR', value: '10.00'}` — value is a STRING with exactly 2 decimals (or whatever the currency requires). Sending `value: 10` (number) errors.\n\n**Payment lifecycle**: created → open → pending → authorized → paid (success) | canceled | expired | failed.\n\n**Profile and mode**: every payment belongs to a profile (website). On Mollie you can have multiple profiles per account. The `profileId` is implicit (uses the default profile of the key); for multi-profile accounts pass it explicitly.\n\n**Subscriptions and mandates**: subscriptions need a mandate (a pre-authorized customer payment method). Workflow: create customer → first one-off payment with `sequenceType=first` → use the resulting mandate to create the subscription.\n\n**Webhooks** out of scope (Mollie pushes payment.* events to a URL you host).\n\n**Pagination**: cursor-based via `from=<resourceId>` + `limit` (max 250). Response has `_links.next.href` for next page.\n\n**Rate limits**: 250 req per 5 sec per IP. On 429 honor headers.\n\n**Out of scope here**: settlements, invoices, profile management, organizations, partners (Mollie Connect), permissions.","region":"intl","category":"payments","icon":"mollie","docsUrl":"https://docs.mollie.com/reference/","requiredEnvVars":["MOLLIE_API_KEY"],"toolCount":14,"authType":"BEARER_TOKEN"},{"slug":"neverbounce","name":"NeverBounce","description":"Validate single emails or run bulk-list verification jobs via NeverBounce. 6 tools, query-string API-key auth.","instructions":"This connector uses the NeverBounce API v4.2 (developers.neverbounce.com).\n\n**Setup**:\n1. Sign in to https://app.neverbounce.com → **Apps → New API Key**.\n2. Copy the key. Set `NEVERBOUNCE_API_KEY`.\n\n**Authentication**: query-string `?key=...`. NeverBounce also supports a custom `Auth` header but query-string is the primary.\n\n**Single vs Bulk**:\n  - `neverbounce_single_check`: synchronous single-email verification. ~1 credit. Returns result (valid/invalid/disposable/catchall/unknown) + flags + suggested_correction.\n  - `neverbounce_create_job`: async bulk verification of a list (up to 1M emails). Returns job_id; poll status with `neverbounce_job_status` until status='complete'; then `neverbounce_job_results` to fetch.\n\n**Result codes**: 0=valid, 1=invalid, 2=disposable, 3=catchall, 4=unknown. Use ONLY 0 (valid) for safe sends if you're conservative.\n\n**Bulk job flow**: 1) create_job with input.payload=array of {email,name?,id?} OR input.payload=URL to CSV. 2) parse the job into ready state via `parse_async` OR `auto_parse=true` flag at create. 3) start the job via `start`. 4) poll `status`. 5) fetch `results`. The adapter abstracts steps 2-3 via the `auto_parse + auto_start` flags on create.\n\n**Cost**: per credit per email checked. Bulk jobs are slightly cheaper than singles.\n\n**Out of scope here**: account billing, custom integrations dashboard.","region":"intl","category":"enrichment","icon":"neverbounce","docsUrl":"https://developers.neverbounce.com/","requiredEnvVars":["NEVERBOUNCE_API_KEY"],"toolCount":6,"authType":"QUERY_AUTH"},{"slug":"new-relic","name":"New Relic","description":"Query New Relic (NRQL, alerts, incidents, dashboards, deployments, entities) from any AI agent via NerdGraph + REST. 7 tools, API-key auth.","instructions":"This connector wraps two New Relic APIs: the modern NerdGraph (GraphQL) at api.newrelic.com/graphql AND the legacy REST API for deployments (api.newrelic.com/v2).\n\n**Setup**:\n1. Log into https://one.newrelic.com → top-right avatar → **API keys**.\n2. Create a **User key** (type: USER, NOT 'License key' / 'Ingest key'). Scopes: account read at minimum; admin if you want to create deployments. Set `NEW_RELIC_USER_KEY`.\n3. Note your **Account ID** (visible in the URL or via the keys page). You'll pass it as a parameter to most tools.\n4. **EU region**: if your org is on the EU data centre, change baseUrl to `https://api.eu.newrelic.com`.\n\n**Authentication**: every request sends `Api-Key: ${NEW_RELIC_USER_KEY}` as a header.\n\n**NerdGraph is the modern API**: most data lives in GraphQL now. The `new-relic_run_nrql` tool wraps the common pattern — pass an account ID + NRQL string, get rows back. For arbitrary queries use `new-relic_graphql_query` (raw GraphQL passthrough).\n\n**NRQL = New Relic Query Language**: SQL-like — `SELECT count(*) FROM Transaction WHERE appName = 'web' SINCE 1 hour ago FACET name`. Use FACET for grouping, TIMESERIES for time-bucketed data, SINCE / UNTIL for windows.\n\n**Time windows**: NRQL uses natural language — `SINCE 30 minutes ago`, `SINCE '2025-01-01' UNTIL '2025-01-02'`.\n\n**Rate limits**: NerdGraph allows 3k req/min per user key; NRQL queries are also gated by a per-account query budget.\n\n**Out of scope here**: agent installation, Synthetics test CRUD, full Alert policy/condition CRUD beyond list (use the dedicated Terraform provider).","region":"intl","category":"monitoring","icon":"new-relic","docsUrl":"https://docs.newrelic.com/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph/","requiredEnvVars":["NEW_RELIC_USER_KEY"],"toolCount":7,"authType":"API_KEY"},{"slug":"newsapi","name":"NewsAPI","description":"Search worldwide news headlines, sources and articles from newsapi.org via any AI agent. 3 tools, API-key auth.","instructions":"This connector wraps the NewsAPI v2 REST API (newsapi.org).\n\n**Setup**:\n1. Register at https://newsapi.org/register for a free Developer key.\n2. Set `NEWSAPI_API_KEY`.\n\n**Authentication**: NewsAPI accepts the key as either the `X-Api-Key` header (used by this adapter) OR an `apiKey` query string. We use the header so it doesn't appear in URL logs.\n\n**Plan limits — IMPORTANT**:\n- Developer (free): 100 requests / day, articles delayed by 24h, no commercial use, results capped at 100 per query.\n- Paid plans: live articles, no daily cap, full historical archive.\n\n**Three endpoints**:\n- `everything` — full archive search, the most powerful. Filter by `q`, `sources`, `domains`, `from`/`to` date, `language`, `sortBy`.\n- `top-headlines` — breaking news, filtered by `country`, `category`, `sources`, or `q`. You CANNOT mix `country`/`category` with `sources` in the same call.\n- `top-headlines/sources` — list all sources, optional filters by `category`, `language`, `country`.\n\n**Query syntax**: `q` supports `AND`, `OR`, `NOT`, exact-phrase double quotes, and grouping with parentheses. Example: `q=(apple AND iphone) NOT macbook`.\n\n**Languages**: ISO-639-1 codes — `en`, `it`, `de`, `es`, `fr`, ... See docs for full list.\n\n**Out of scope here**: NewsAPI does NOT expose article full text — only `title`, `description`, `content` (truncated to ~200 chars). For full text you must fetch the `url` separately.","region":"intl","category":"data","icon":"newsapi","docsUrl":"https://newsapi.org/docs","requiredEnvVars":["NEWSAPI_API_KEY"],"toolCount":3,"authType":"API_KEY"},{"slug":"nimble","name":"Nimble","description":"Manage Nimble CRM (contacts, activities, deals, tasks, notes) from any AI agent. 9 tools, OAuth2 auth.","instructions":"This connector wraps the Nimble REST API v1 (app.nimble.com/api/v1).\n\n**Setup — OAuth2 refresh flow**:\n1. Sign in to https://app.nimble.com → **Settings → Integrations → API → Create OAuth app**.\n2. Note the `client_id`, `client_secret`, and complete the OAuth dance at `https://app.nimble.com/oauth/authorize?response_type=code&client_id=...&redirect_uri=...&scope=...` to get an authorization code.\n3. Exchange for tokens: `POST https://app.nimble.com/oauth/token?grant_type=authorization_code&code=...&client_id=...&client_secret=...&redirect_uri=...`.\n4. Save the `refresh_token`. Set `NIMBLE_CLIENT_ID`, `NIMBLE_CLIENT_SECRET`, `NIMBLE_REFRESH_TOKEN`.\n\n**Authentication**: OAuth2 — engine handles the refresh. Access token sent as `Authorization: Bearer ACCESS_TOKEN`.\n\n**Contact model**: Nimble unifies leads + contacts + companies into a single 'Contact' object with `record_type` discriminator (`person` or `company`). Fields are namespaced — `fields['email'][0].value`, `fields['first name'][0].value` etc.\n\n**Pagination**: `page` (1-based) + `per_page` (max 30).\n\n**Rate limits**: 5 req/sec per token. 429 → exponential backoff.\n\n**Out of scope here**: pipeline analytics, social-listening streams, email-sync settings, group messaging.","region":"intl","category":"crm","icon":"nimble","docsUrl":"https://nimble.readme.io/","requiredEnvVars":["NIMBLE_CLIENT_ID","NIMBLE_CLIENT_SECRET","NIMBLE_REFRESH_TOKEN"],"toolCount":9,"authType":"OAUTH2"},{"slug":"nominatim","name":"Nominatim (OpenStreetMap)","description":"Free, no-auth geocoding using OpenStreetMap's Nominatim service. Forward + reverse geocoding + place lookup + search. 4 tools.","instructions":"This connector uses Nominatim — OpenStreetMap's free geocoding service (nominatim.org).\n\n**Setup**: NO API KEY REQUIRED. Just install the connector. The base URL is `https://nominatim.openstreetmap.org`.\n\n**HOWEVER — usage policy you MUST respect** (otherwise you'll get banned):\n  1. **Max 1 request per second** per IP. The connector does NOT throttle for you — your agent must self-limit. For bulk usage, run a self-hosted Nominatim or use a paid Nominatim host.\n  2. **User-Agent header REQUIRED** — every request must identify you. The connector pins `User-Agent: AnythingMCP (https://anythingmcp.com)` automatically.\n  3. **No heavy bulk geocoding** — if you need >100 requests/hour, switch to MapTiler / OpenCage / Mapbox / Google.\n  4. **Cache results** for at least 24h — avoid re-geocoding the same address.\n\n**Coordinate convention**: latitude FIRST then longitude (unlike Mapbox). Format is `lat,lon` in some endpoints, `lat=X&lon=Y` query params in others.\n\n**Languages**: pass `accept-language` query param (e.g. `de`, `en`, `fr`) to localize place names.\n\n**Result format**: `format=json` (compact), `format=jsonv2` (richer), `format=geojson` (GeoJSON Feature). Default `xml` — always pass `format=json` for our tools.\n\n**Address importance ranking**: results include `importance` (0-1, Wikipedia-derived). High importance = well-known place; low = obscure.\n\n**Out of scope here**: address_lookup batch (use repeated single calls), search by category beyond default, photon (separate but related service).","region":"intl","category":"maps","icon":"openstreetmap","docsUrl":"https://nominatim.org/release-docs/develop/api/Overview/","requiredEnvVars":[],"toolCount":4,"authType":"NONE"},{"slug":"nutshell-crm","name":"Nutshell CRM","description":"Manage Nutshell CRM (leads, contacts, accounts, activities, tasks) from any AI agent. 9 tools, basic-auth with API token.","instructions":"This connector wraps the Nutshell REST API v1 (app.nutshell.com/api/v1).\n\n**Setup**:\n1. Log into https://app.nutshell.com → top-right avatar → **Setup → API → New API key**.\n2. Note the `Username` (your Nutshell email) and the generated `API key`.\n3. Set `NUTSHELL_USERNAME` (email) and `NUTSHELL_API_KEY`.\n\n**Authentication**: HTTP Basic — username = your account email, password = the API key. Nutshell ALSO supports a legacy JSON-RPC API but the REST endpoints exposed here are easier to consume.\n\n**Entity types**: `Lead` (the main pipeline opportunity), `Contact` (person), `Account` (company), `Activity` (call/meeting log), `Task` (todo). Each has its own endpoint root.\n\n**Pagination**: `page` (1-based) + `limit` (max 100).\n\n**Rate limits**: 5 req/sec per user; 5k/day. 429 with `X-Rate-Limit-Remaining` header.\n\n**Out of scope here**: web-form leads inbox, email templates, pipeline analytics, custom-app builder.","region":"intl","category":"crm","icon":"nutshell-crm","docsUrl":"https://developers.nutshell.com/docs","requiredEnvVars":["NUTSHELL_USERNAME","NUTSHELL_API_KEY"],"toolCount":9,"authType":"BASIC_AUTH"},{"slug":"omnisend","name":"Omnisend","description":"Manage Omnisend (e-commerce marketing automation: contacts, campaigns, events, products, categories) from any AI agent. 9 tools, X-API-KEY auth.","instructions":"This connector wraps the Omnisend REST API v3 (api.omnisend.com/v3).\n\n**Setup**:\n1. Log into https://app.omnisend.com → top-right avatar → **Store settings → Integrations & API → API keys → Create API key**.\n2. Set `OMNISEND_API_KEY`.\n\n**Authentication**: `X-API-KEY: ${OMNISEND_API_KEY}`.\n\n**Contact statuses**: `subscribed`, `unsubscribed`, `nonSubscribed` — per channel (email vs SMS).\n\n**Custom events**: trigger automations via the events endpoint. Send an event with name + email/contactID + properties; Omnisend matches it to active workflows.\n\n**Pagination**: cursor-based via `paging.next`. `limit` (max 250).\n\n**Rate limits**: 400 req/min per token. 429 with `Retry-After`.\n\n**Out of scope here**: workflow editor, SMS sender ID setup, product feed sync (use the dedicated `/products` endpoint), GDPR-erasure flow.","region":"intl","category":"email","icon":"omnisend","docsUrl":"https://api-docs.omnisend.com/","requiredEnvVars":["OMNISEND_API_KEY"],"toolCount":9,"authType":"API_KEY"},{"slug":"openweather","name":"OpenWeather","description":"Query OpenWeather (current weather, forecasts, air quality, geocoding) from any AI agent. 6 tools, API-key auth.","instructions":"This connector wraps the OpenWeather REST API (api.openweathermap.org).\n\n**Setup**:\n1. Sign up at https://openweathermap.org/users/sign_up (free tier: 60 calls/min, 1M/month).\n2. Go to https://home.openweathermap.org/api_keys → copy the default key OR create a new one labelled e.g. `mcp`.\n3. Wait ~10 minutes — new keys take time to activate on the free tier.\n4. Set `OPENWEATHER_API_KEY`.\n\n**Authentication**: every request takes `appid=${OPENWEATHER_API_KEY}` as a query string. The adapter injects it automatically — never include it in tool arguments.\n\n**Coordinates first**: most endpoints want `lat`/`lon`, not city names. Use `openweather_geocode_city` first to translate `London,GB` into coordinates, then call the weather endpoints with the coordinates. The Geocoding API is free and unlimited within the regular rate limit.\n\n**Units**: pass `units=metric` (Celsius, m/s) or `units=imperial` (Fahrenheit, mph). Default (`standard`) returns Kelvin and m/s — usually NOT what you want.\n\n**Language**: pass `lang=it` / `de` / `en` for localized weather descriptions. The numeric data is always identical, only the human-readable `weather[0].description` string changes.\n\n**Forecast endpoints**: the free tier exposes the 5-day/3-hour forecast (`/data/2.5/forecast`). The newer One Call 3.0 API (hourly + daily + minutely) requires a paid subscription — gated separately in the tool descriptions.\n\n**Rate limits**: 60 calls/min on free tier; tighter limits on burst. On 429, exponential backoff. Errors come back as `{cod, message}` with HTTP 401 for bad key, 404 for unknown city, 429 for rate-limit.\n\n**Out of scope here**: historical data (paid), weather maps tiles (different host, image returns), severe weather alerts (paid).","region":"intl","category":"data","icon":"openweather","docsUrl":"https://openweathermap.org/api","requiredEnvVars":["OPENWEATHER_API_KEY"],"toolCount":6,"authType":"QUERY_AUTH"},{"slug":"outreach","name":"Outreach","description":"Drive Outreach (sales engagement platform) from any AI agent: prospects, accounts, sequences, sequence enrollment, tasks, users. 11 tools, OAuth2 Bearer auth, JSON:API spec.","instructions":"This connector uses the Outreach API v2 (developers.outreach.io).\n\n**Setup**:\n1. Outreach API access is OAuth2-only — no static API keys. Register an OAuth app at https://developers.outreach.io.\n2. Run the OAuth2 authorization-code flow to obtain an access_token (short-lived, ~7200 s) + refresh_token (long-lived). The access_token is what you pass to the connector.\n3. Set `OUTREACH_ACCESS_TOKEN`.\n4. Refresh logic: handle refresh-token rotation externally (the engine refreshes BEARER_TOKEN on 401 if `refreshToken` + `tokenUrl` are present in authConfig — but per-tenant OAuth2 setup is outside this connector's scope).\n\n**Authentication**: `Authorization: Bearer ${OUTREACH_ACCESS_TOKEN}`.\n\n**JSON:API spec**: every response wraps data in `{data:{id,type,attributes,relationships}, included?:[], meta, links}`. Use `?include=` (comma-separated) to side-load related resources. Use `?fields[TYPE]=...` for sparse fieldsets.\n\n**Outreach objects** (Outreach-specific naming):\n  - **Prospect** = a person at an account (like Salesloft 'person').\n  - **Account** = a company.\n  - **Sequence** = multi-step outreach cadence.\n  - **Sequence Step** = each touchpoint.\n  - **Sequence State** = a prospect's enrollment in a sequence (active/paused/finished/bounced).\n  - **Mailbox** = the email account used to send sequence emails.\n\n**Sequence enrollment**: POST `/sequenceStates` with relationships {prospect, sequence, mailbox}. The mailbox must belong to the API token's user OR a delegated user.\n\n**Filtering**: `filter[attribute]=value` query syntax. Multiple filters AND together. Example: `?filter[bounced]=true&filter[sequenceState.id]=N`.\n\n**Pagination**: `page[size]` (default 50, max 1000) + `page[after]` cursor.\n\n**Rate limits**: 10,000 req/hour per token (Enterprise). On 429 honor `Retry-After`.\n\n**Out of scope here**: sequence template editing, calling, conversational intelligence, opportunity sync (use the CRM directly), task templates.","region":"intl","category":"crm","icon":"outreach","docsUrl":"https://developers.outreach.io/api/reference/","requiredEnvVars":["OUTREACH_ACCESS_TOKEN"],"toolCount":11,"authType":"BEARER_TOKEN"},{"slug":"pandadoc","name":"PandaDoc","description":"Drive PandaDoc (proposals + e-signature) from any AI agent: documents, templates, contacts, recipients, sending for signature, status tracking. 10 tools, API-key auth.","instructions":"This connector uses the PandaDoc API v1 (developers.pandadoc.com).\n\n**Setup**:\n1. Sign in to https://app.pandadoc.com → top-right avatar → **API → API Key**.\n2. Use the **Production API Key** (or **Sandbox** for testing). The key format is `<long-string>`.\n3. Set `PANDADOC_API_KEY`.\n\n**Authentication**: `Authorization: API-Key ${PANDADOC_API_KEY}` — literal `API-Key ` prefix, NOT `Bearer`. Adapter handles via API_KEY profile.\n\n**Document workflow**:\n  1. Create document from template (`pandadoc_create_document`) — fills template variables with `tokens` and pricing tables, sets recipients.\n  2. Wait for document.status = 'document.draft' (initial state).\n  3. Send for signature (`pandadoc_send_document`).\n  4. Recipients receive emails; poll `pandadoc_get_document_status` to track signing.\n  5. When all signed, status = 'document.completed' and you can download via `pandadoc_download_document`.\n\n**Templates**: build the visual template in PandaDoc UI; access via `pandadoc_list_templates` to get template_id. Templates have `tokens` (placeholders), `fields` (form inputs filled by recipients), `pricing_tables`, and roles (named recipient slots like 'Client', 'Vendor').\n\n**Status values**: document.draft, document.sent, document.viewed, document.waiting_approval, document.approved, document.rejected, document.completed, document.expired, document.declined, document.voided.\n\n**Pagination**: `?page=N&count=M` (max 100). Headers include X-Total-Count.\n\n**Rate limits**: 100 req/min per API key. On 429 back off.\n\n**Out of scope here**: webhooks management, OAuth (for multi-tenant apps), in-app branding, payment forms config.","region":"intl","category":"e-signature","icon":"pandadoc","docsUrl":"https://developers.pandadoc.com/reference/about","requiredEnvVars":["PANDADOC_API_KEY"],"toolCount":10,"authType":"API_KEY"},{"slug":"pinterest","name":"Pinterest","description":"Manage Pinterest (boards, pins, search, ads, audiences) from any AI agent via Business API. 9 tools, OAuth2 token.","instructions":"This connector wraps the Pinterest Business API v5 (api.pinterest.com/v5).\n\n**Setup — OAuth2**:\n1. Register at https://developers.pinterest.com → **Create app**.\n2. Configure redirect URI, run the OAuth flow at `https://www.pinterest.com/oauth/?response_type=code&client_id=...&redirect_uri=...&scope=boards:read,boards:write,pins:read,pins:write,user_accounts:read`.\n3. Exchange the code at `https://api.pinterest.com/v5/oauth/token`.\n4. Set `PINTEREST_CLIENT_ID`, `PINTEREST_CLIENT_SECRET`, `PINTEREST_REFRESH_TOKEN`.\n\n**Authentication**: OAuth2 with refresh — engine handles. Sends `Authorization: Bearer ACCESS_TOKEN`.\n\n**Sandbox available**: change baseUrl to `api-sandbox.pinterest.com/v5` for testing.\n\n**Pin formats**: standard pins point at an external image URL (`media_source: {source_type:'image_url', url:'...'}`) or use the upload endpoint for direct upload (multipart, out of scope here). Video pins require a separate upload flow.\n\n**Pagination**: `bookmark` (cursor) + `page_size` (default 25, max 100).\n\n**Rate limits**: 1000 req / hour per token (varies by endpoint). 429 with `Retry-After`.\n\n**Out of scope here**: video upload multipart, catalog feeds, ad campaign creation, trends, conversion API.","region":"intl","category":"social","icon":"pinterest","docsUrl":"https://developers.pinterest.com/docs/api/v5/","requiredEnvVars":["PINTEREST_CLIENT_ID","PINTEREST_CLIENT_SECRET","PINTEREST_REFRESH_TOKEN"],"toolCount":9,"authType":"OAUTH2"},{"slug":"pipedrive","name":"Pipedrive CRM","description":"Drive Pipedrive (CRM) from any AI agent: search and manage deals, persons, organizations, activities, pipelines, and stages. 18 ready-to-use tools covering the most common sales workflows. API-token auth via query string, no SDK, no OAuth dance.","instructions":"This connector uses the Pipedrive REST API.\n\n**Versions**: most resources (deals, persons, organizations, activities, pipelines, stages, users) are on the newer **v2** API (`/api/v2/...`). The universal item-search endpoint is still on v1 (`/v1/itemSearch`). The adapter mixes both as appropriate — you don't need to know the distinction, just pick the tool.\n\n**Setup**:\n1. Sign in to Pipedrive → top-right avatar → **Personal preferences → API**. Copy the **personal API token** shown there.\n2. Paste it as `PIPEDRIVE_API_TOKEN`.\n3. (Optional) If your account is on a custom company subdomain that requires it, set `PIPEDRIVE_COMPANY_DOMAIN` to your subdomain (e.g. `acme` if your CRM lives at `acme.pipedrive.com`). The default base URL `https://api.pipedrive.com` works for almost everyone since the token already routes to the right company.\n\n**Authentication**: API token in query string (`?api_token=...`) — every request automatically appends it. The token belongs to a single user; everything the connector does is attributed to that user. For multi-user installs, use a dedicated service-account user with the permissions you want the agent to have.\n\n**Pagination**: v2 endpoints use **cursor-based pagination** (`limit` + `cursor`). Each list response carries `additional_data.next_cursor` — pass it as `cursor` on the next call. `limit` defaults to 100, max 500. The adapter's list tools expose both parameters explicitly.\n\n**Search**: for fuzzy text matching across multiple entity types, use `pipedrive_search` (universal). For type-narrowed search inside a known entity, use the per-resource `pipedrive_search_deals` / `pipedrive_search_persons`.\n\n**Custom fields**: every CRM has custom fields. v2 endpoints accept and return them under the `custom_fields` body/response key. The shape is `{field_api_key: value}` — get the API keys from `GET /v1/dealFields` (and `personFields`, `organizationFields`). The adapter ships `pipedrive_list_deal_fields` / `pipedrive_list_person_fields` / `pipedrive_list_organization_fields` for this.\n\n**Rate limits**: Pipedrive applies a per-token rate limit (~80 req / 2 seconds per company, plus daily quotas that scale with plan). On 429, back off — the engine does NOT auto-retry.\n\n**Webhooks not in scope**: Pipedrive can push webhook events for deal/person changes; receiving them requires a separately-hosted endpoint and is outside this connector's read/write scope.\n\n**Filters & sorting**: list endpoints accept `filter_id`, `owner_id`, `status` for deals; `sort` parameter accepts comma-separated field directives like `add_time DESC,update_time DESC` on v2. Check Pipedrive's API reference for the supported sort fields per resource.\n\n**Out of scope here**: leads (v1 only), products, files, mailbox, projects, and goals — add purpose-built tools if your workflows need them.","region":"intl","category":"crm","icon":"pipedrive","docsUrl":"https://developers.pipedrive.com/docs/api/v1","requiredEnvVars":["PIPEDRIVE_API_TOKEN"],"toolCount":22,"authType":"QUERY_AUTH"},{"slug":"plaid","name":"Plaid","description":"Read Plaid (bank-linking, transactions, balances, identity, liabilities, investments) from any AI agent. 10 tools, body-credential auth.","instructions":"This connector wraps the Plaid REST API (per-environment).\n\n**Setup**:\n1. Sign up at https://dashboard.plaid.com → **Team Settings → Keys**. Note your `client_id` and one of: `sandbox`, `development`, `production` secret.\n2. **Environment matters**: change baseUrl: `sandbox.plaid.com` (free, fake banks), `development.plaid.com` (real banks, 100 free items), `production.plaid.com` (paid). Defaults to sandbox.\n3. Set `PLAID_CLIENT_ID` and `PLAID_SECRET`.\n\n**Authentication**: every POST sends `client_id` + `secret` in the JSON body — NOT as headers. The adapter merges them automatically via envVars.\n\n**Link flow**: Plaid is server+client — to obtain an `access_token`, your frontend uses Plaid Link with a `link_token` you minted server-side. This adapter assumes you already have an `access_token` for an Item (one connected bank). For Link itself use `plaid_link_token_create`.\n\n**Identifiers**:\n- `link_token`: short-lived (~30 min), passed to Link.\n- `public_token`: returned by Link, exchanged once for an access_token.\n- `access_token`: long-lived, scoped to one Item (institution+user).\n- `item_id`: stable ID for an access_token's Item.\n\n**Rate limits**: vary by environment + product. Sandbox is loose; production limits depend on plan. 429 with `Retry-After`.\n\n**Out of scope here**: webhooks setup, Plaid Signal (risk scores), Income/Employment products' end-user flows, Transfer (ACH origination).","region":"intl","category":"payments","icon":"plaid","docsUrl":"https://plaid.com/docs/api/","requiredEnvVars":["PLAID_CLIENT_ID","PLAID_SECRET"],"toolCount":10,"authType":"NONE"},{"slug":"plane-so","name":"Plane","description":"Manage Plane (open-source project management) workspaces, projects, issues, cycles, modules from any AI agent. 10 tools, API key auth.","instructions":"This connector wraps the Plane REST API v1 (api.plane.so/api/v1 — or your self-hosted host).\n\n**Setup**:\n1. Log into your Plane instance → top-right avatar → **API Tokens → Create new token**.\n2. Note the **workspace slug** (the part of URLs like `app.plane.so/<slug>/projects`).\n3. Set `PLANE_API_KEY`. For self-hosted, also set `PLANE_HOST` (e.g. `https://plane.yourdomain.com`) — defaults to cloud (api.plane.so).\n\n**Authentication**: `X-API-Key: ${PLANE_API_KEY}`.\n\n**Hierarchy**: `Workspace → Project → Issue → Sub-issue`. Cycles + Modules are issue containers within a project for sprint planning / feature grouping.\n\n**Pagination**: `per_page` (max 100) + `cursor` (opaque, returned in response).\n\n**Rate limits**: 60 req/min on cloud. 429 with `Retry-After`.\n\n**Out of scope here**: workflow automation, view layout CRUD, document pages editor, the GraphQL backend used by the web app (not officially supported for third-party use).","region":"intl","category":"project-management","icon":"plane-so","docsUrl":"https://docs.plane.so/api-reference/introduction","requiredEnvVars":["PLANE_API_KEY"],"toolCount":10,"authType":"API_KEY"},{"slug":"recurly","name":"Recurly","description":"Drive Recurly (subscription billing, US-focused) from any AI agent: accounts, subscriptions, invoices, plans, coupons. 11 tools, Basic-auth.","instructions":"This connector uses the Recurly API v2021-02-25 (recurly.com/developers).\n\n**Setup**:\n1. Sign in to Recurly → **Integrations → API Credentials → Add Key**.\n2. Pick a Private API key (NOT a public site key — different purpose).\n3. Set `RECURLY_API_KEY`.\n\n**Authentication**: HTTP Basic with username=API_KEY, password=empty (Stripe-style).\n\n**Required Accept header pinned per-tool**: Recurly REQUIRES `Accept: application/vnd.recurly.v2021-02-25` on every request. The adapter pins this on each endpoint's headers.\n\n**Account model**: every customer is an `account`. Subscriptions, invoices, transactions all link to an account. Accounts can be `parent_account` for hierarchies (B2B).\n\n**Subscription states**: future, active, paused, expired, canceled, failed.\n\n**Currency**: each account has a 3-letter currency code. Subscriptions must use one of the plan's supported currencies.\n\n**Pagination**: cursor-based — `limit` (max 200) + response includes `has_more` + `next` URL.\n\n**Rate limits**: 1000 req/min per site. On 429 honor headers.\n\n**Out of scope here**: hosted pages, billing-info CRUD beyond list, refunds beyond invoice creation, gift cards, measured units, transactions detail, custom fields management.","region":"intl","category":"payments","icon":"recurly","docsUrl":"https://recurly.com/developers/api/","requiredEnvVars":["RECURLY_API_KEY"],"toolCount":11,"authType":"BASIC_AUTH"},{"slug":"reddit","name":"Reddit","description":"Read and post to Reddit from any AI agent: subreddit listings, post search, comments, user info, submit posts/comments, vote. 12 tools, OAuth2 Bearer auth.","instructions":"This connector uses the Reddit OAuth2 API (reddit.com/dev/api).\n\n**Setup**:\n1. Sign in to Reddit → https://www.reddit.com/prefs/apps → **Create another app**.\n2. Pick `script` (for personal use) or `web app` (for OAuth users).\n3. Note the **client_id** (under the app name) and **client_secret**.\n4. Obtain an access token via OAuth2 password grant (for script apps) or auth-code (for web apps). Endpoint: `POST https://www.reddit.com/api/v1/access_token` with HTTP Basic (client_id:client_secret).\n5. Set `REDDIT_ACCESS_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${REDDIT_ACCESS_TOKEN}`. Access tokens expire after 1 hour — your orchestrator must refresh.\n\n**User-Agent header REQUIRED**: Reddit blocks requests without a meaningful User-Agent. The adapter pins `User-Agent: AnythingMCP/1.0 (by /u/anythingmcp)`. If Reddit returns 429 unexpectedly, change this string to one specific to your app (Reddit recommends `<platform>:<app ID>:<version> (by /u/<reddit username>)`).\n\n**oauth.reddit.com vs www.reddit.com**: authenticated requests MUST go to `https://oauth.reddit.com` (the adapter does this). Anonymous calls go to www.reddit.com.\n\n**Resource model**: every Reddit object has a `kind` prefix:\n  - t1_ = comment\n  - t2_ = user\n  - t3_ = link/post\n  - t4_ = message\n  - t5_ = subreddit\nA full ID is `kind_id36`, e.g. `t3_abc123`. Plain `id36` works for some endpoints.\n\n**Listings (pagination)**: most list endpoints return a `Listing` with `after` and `before` cursors. Pass `after=t3_abc123` to paginate.\n\n**Rate limits**: 100 queries / minute / OAuth client (free tier as of 2025; commercial tiers higher). Reddit's API became paid for high-volume use in 2023 — read https://www.redditinc.com/policies/data-api-terms.\n\n**Out of scope here**: PRAW-style streaming, moderator actions (ban/approve), wiki edits, multireddits CRUD, scheduled posts.","region":"intl","category":"social","icon":"reddit","docsUrl":"https://www.reddit.com/dev/api","requiredEnvVars":["REDDIT_ACCESS_TOKEN"],"toolCount":12,"authType":"API_KEY"},{"slug":"sage-business-cloud","name":"Sage Business Cloud Accounting","description":"Manage Sage Business Cloud Accounting (contacts, products, invoices, bank accounts, transactions) from any AI agent. 9 tools, OAuth2 auth.","instructions":"This connector wraps the Sage Business Cloud Accounting API v3.1 (api.accounting.sage.com).\n\n**Setup — OAuth2**:\n1. Register at https://developer.sage.com/accounting → **Create app**. Set callback URL.\n2. Complete the auth flow at `https://www.sageone.com/oauth2/auth/central?response_type=code&client_id=...&redirect_uri=...&scope=full_access&country=gb` (use the country code matching your Sage subscription — gb, us, ca, de, fr, ie, es).\n3. Exchange the code at `https://oauth.accounting.sage.com/token`.\n4. Set `SAGE_CLIENT_ID`, `SAGE_CLIENT_SECRET`, `SAGE_REFRESH_TOKEN`.\n\n**Authentication**: OAuth2 — engine handles refresh. Sends `Authorization: Bearer ${ACCESS_TOKEN}`.\n\n**Business ID header**: Sage scopes everything to a business. Pass `X-Business: <BUSINESS_ID>` header on each call OR rely on the default business of the user. To discover IDs: `GET /v3.1/businesses`.\n\n**Pagination**: `page` (1-based) + `items_per_page` (max 200).\n\n**Rate limits**: 100 req/min per token, 10k/day. 429 with `Retry-After`.\n\n**Out of scope here**: VAT return submission, Stripe-connect setup, multi-currency journal lines beyond standard, asset register.","region":"intl","category":"accounting","icon":"sage-business-cloud","docsUrl":"https://developer.sage.com/accounting/reference/","requiredEnvVars":["SAGE_CLIENT_ID","SAGE_CLIENT_SECRET","SAGE_REFRESH_TOKEN"],"toolCount":9,"authType":"OAUTH2"},{"slug":"salesflare","name":"Salesflare","description":"Manage Salesflare CRM (contacts, accounts, opportunities, tasks, custom fields, tags) from any AI agent. 9 tools, API key header auth.","instructions":"This connector wraps the Salesflare REST API v1 (api.salesflare.com).\n\n**Setup**:\n1. Log into https://app.salesflare.com → **Settings → Personal API key → Generate**.\n2. Set `SALESFLARE_API_KEY`.\n\n**Authentication**: `Authorization: ${SALESFLARE_API_KEY}` (the API key is sent RAW as the Authorization header value — NOT `Bearer X`, not `Basic X`). The adapter wires this as a custom-name API_KEY auth.\n\n**Entity model**: `Account` (company) → `Contact` (person at the account) → `Opportunity` (deal). Tasks + interactions hang off any of these.\n\n**Pagination**: `limit` (max 200) + `offset` (0-based).\n\n**Rate limits**: 60 req/min per key. 429 with `Retry-After`.\n\n**Out of scope here**: email/calendar sync settings, workflow editor, the Magic Bar Chrome extension hooks.","region":"intl","category":"crm","icon":"salesflare","docsUrl":"https://api.salesflare.com/docs","requiredEnvVars":["SALESFLARE_API_KEY"],"toolCount":9,"authType":"API_KEY"},{"slug":"salesloft","name":"Salesloft","description":"Drive Salesloft (sales engagement platform) from any AI agent: people, accounts, cadences, sequence enrollment, activities, custom fields. 11 tools, OAuth2 Bearer auth.","instructions":"This connector uses the Salesloft v2 REST API (developers.salesloft.com).\n\n**Setup**:\n1. Salesloft API access requires OAuth2 — Personal API tokens are NOT exposed in the standard UI.\n2. Sign in to Salesloft → **Settings → Your API Access** (if visible) — if not, ask an admin to generate an OAuth token for you OR register an OAuth app.\n3. Obtain an access token (typically valid 30 minutes for OAuth flow; longer for refresh-token rotation).\n4. Set `SALESLOFT_ACCESS_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${SALESLOFT_ACCESS_TOKEN}`. The token expires (~30 min) — if you see 401s, refresh via Salesloft's OAuth refresh-token endpoint (out of scope here — handle via your OAuth client).\n\n**Salesloft objects**:\n  - **People** = individual contacts (sales prospects). Have email + linked account.\n  - **Accounts** = companies.\n  - **Cadences** = multi-step outreach sequences (Salesloft's term for what Outreach calls 'sequences').\n  - **Steps** = each touchpoint in a cadence (email/call/LinkedIn/task).\n  - **Cadence Memberships** = enrollments of a person into a cadence.\n\n**Adding people to a cadence**: POST /cadence_memberships with person_id + cadence_id. Required: a user_id (who 'owns' this enrollment).\n\n**Pagination**: `per_page` (default 25, max 100) + `page` (1-based) on most endpoints.\n\n**Rate limits**: 600 req/min per organization. Per-endpoint subset limits exist (e.g. enrichment is slower). On 429 honor `Retry-After`.\n\n**Out of scope here**: cadence template editing, conversation intelligence, call dispositions, deal/opportunity sync (Salesloft has a CRM-sync layer with HubSpot/Salesforce; manage through CRM directly).","region":"intl","category":"crm","icon":"salesloft","docsUrl":"https://developers.salesloft.com/","requiredEnvVars":["SALESLOFT_ACCESS_TOKEN"],"toolCount":11,"authType":"BEARER_TOKEN"},{"slug":"savvycal","name":"SavvyCal","description":"Drive SavvyCal (modern team scheduling) from any AI agent: scheduling links, meetings, availability. 6 tools, API-key Bearer auth.","instructions":"This connector uses the SavvyCal API v1 (developer.savvycal.com).\n\n**Setup**:\n1. Sign in to https://savvycal.com → top-right avatar → **Developer → API Keys → Create new key**.\n2. Set `SAVVYCAL_API_KEY`.\n\n**Authentication**: `Authorization: Bearer ${SAVVYCAL_API_KEY}`.\n\n**Resource model**:\n  - **Link**: a scheduling link template (`/me/intro-call`).\n  - **Booking**: a scheduled meeting via a link.\n  - **Calendar**: connected calendar source (Google/Outlook).\n\n**Pagination**: cursor — response has `meta.next_cursor`.\n\n**Out of scope here**: workflows automation editing, payments via Stripe, team round-robin config (UI-only).","region":"intl","category":"scheduling","icon":"savvycal","docsUrl":"https://developer.savvycal.com/","requiredEnvVars":["SAVVYCAL_API_KEY"],"toolCount":6,"authType":"BEARER_TOKEN"},{"slug":"sendgrid","name":"SendGrid","description":"Send transactional and marketing emails via SendGrid's v3 API from any AI agent. 14 tools covering send, templates, stats, suppressions, contacts and marketing lists. Bearer-token auth, EU + Global datacenter support.","instructions":"This connector uses the SendGrid v3 REST API.\n\n**Setup**:\n1. Sign in to SendGrid (or via Twilio's console — SendGrid is part of Twilio since 2019) → **Settings → API Keys → Create API Key**.\n2. Pick **Restricted Access** and grant at least: Mail Send (Full Access), Template Engine (Read), Stats (Read), Suppressions (Read), Marketing > Contacts (Read+Write), Marketing > Lists (Read+Write). Full Access also works but follows least-privilege poorly.\n3. Copy the key — it's shown ONCE. Set `SENDGRID_API_KEY` to it.\n4. (Optional) If your account is on the **EU datacenter** (GDPR data residency), set `SENDGRID_BASE_URL` to `https://api.eu.sendgrid.com`. Default is the global `https://api.sendgrid.com`.\n\n**Authentication**: Bearer token (`Authorization: Bearer ${SENDGRID_API_KEY}`).\n\n**Sender authentication first!** SendGrid will silently quarantine emails from un-verified senders. Before sending production mail, verify either:\n  - **Single Sender** (quick, for low volume): Settings → Sender Authentication → Verify a Single Sender. SendGrid emails a verification link.\n  - **Domain Authentication** (recommended for any real volume): Settings → Sender Authentication → Authenticate Your Domain. Adds CNAME records to your DNS.\nThe `from.email` in `sendgrid_send_mail` must match an authenticated sender, otherwise emails will be silently rejected or marked as spam.\n\n**Mail send body model**: SendGrid uses a message-level + per-recipient model. The `personalizations` array lets you send N customized versions in one API call (each with its own `to`, `subject`, `substitutions`). For a simple 'send the same email to one person' call, use a single personalization with one `to`.\n\n**Content order matters**: when sending both plain-text and HTML, list `text/plain` BEFORE `text/html` in the `content` array per RFC 2046.\n\n**Templates (dynamic)**: SendGrid's modern templates are **Dynamic Templates** (Handlebars-based). To send one, omit `subject`/`content`, set `template_id` at the message level, and pass `dynamic_template_data` per personalization. The legacy Transactional Templates use substitutions and are still supported but deprecated.\n\n**Categories** (≤10 per email, alphanumeric + underscore): tag your sends to group them in Stats. The adapter accepts `categories` at the top of `sendgrid_send_mail`.\n\n**Suppression precedence**: bounces, blocks, invalid emails, spam reports, and unsubscribes all live in the suppression group. Even a perfectly authenticated message to a suppressed address won't deliver. Use `sendgrid_list_bounces` and remove with `sendgrid_delete_bounce` (not exposed here — bounce removal must be explicit and is GDPR-sensitive, do it via the SendGrid UI).\n\n**Marketing Contacts**: contacts are NOT the same as suppression list. The Marketing API (`/v3/marketing/contacts`) is for the Marketing Campaigns product (newsletters), separate from transactional Mail Send. Adding a contact to Marketing does NOT affect deliverability of transactional mail to that address.\n\n**Rate limits**: Mail Send caps depend on plan (Essentials: 100k/month; Pro: 1.5M/month, etc.). Burst limits ~600 req/min for transactional, higher with dedicated IPs. On 429, back off.\n\n**Webhooks (Event Webhook)** out of scope for this connector — host your own receiver to ingest delivery/bounce/open/click events.\n\n**Out of scope here**: subuser management, IP warmup, A/B testing, single sends, designs, and the legacy Web v2 API.","region":"intl","category":"email","icon":"sendgrid","docsUrl":"https://www.twilio.com/docs/sendgrid/api-reference","requiredEnvVars":["SENDGRID_API_KEY"],"toolCount":14,"authType":"BEARER_TOKEN"},{"slug":"signwell","name":"SignWell","description":"Drive SignWell (developer-friendly e-signature) from any AI agent: documents, templates, signature requests, signers. 8 tools, API key + application ID auth.","instructions":"This connector uses the SignWell API v1 (developers.signwell.com).\n\n**Setup**:\n1. Sign in to https://app.signwell.com → top-right avatar → **API → Create application**.\n2. Note the **Application ID** and **API Key**.\n3. Set:\n   - `SIGNWELL_API_KEY` = the API key\n   - `SIGNWELL_APPLICATION_ID` = the application ID\n\n**Authentication**: header `X-Api-Key: ${SIGNWELL_API_KEY}` + `X-Api-Application: ${SIGNWELL_APPLICATION_ID}` (both required).\n\n**test_mode**: every write endpoint accepts `test_mode=true` to validate without sending real emails or burning credits.\n\n**Document workflow**: create document from URL/upload → status='Sent' → recipients sign → status='Completed' → download PDF.\n\n**Signers / Recipients**: each has id, name, email, message, status (waiting/seen/signed/declined). Decline/cancel is supported via update endpoints.\n\n**Pagination**: `?offset=N&limit=M` (max 100).\n\n**Out of scope here**: webhook subscription management, custom fields per template, API app management.","region":"intl","category":"e-signature","icon":"signwell","docsUrl":"https://developers.signwell.com/reference","requiredEnvVars":["SIGNWELL_API_KEY","SIGNWELL_APPLICATION_ID"],"toolCount":8,"authType":"API_KEY"},{"slug":"slab","name":"Slab","description":"Drive Slab (team wiki) from any AI agent via its GraphQL API: posts, topics, users, search. 6 tools, Bearer auth.","instructions":"This connector uses the Slab GraphQL API (api.slab.com/v1/graphql).\n\n**Setup**:\n1. Sign in to Slab → top-right avatar → **Account Settings → Tokens → Create token**.\n2. Pick scopes: at minimum `read posts`, `read topics`, `read users`.\n3. Set `SLAB_API_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${SLAB_API_TOKEN}`.\n\n**GraphQL-only**: Slab has no REST. The adapter exposes a few curated mutations + queries as wrappers; for arbitrary queries use the auto-injected GraphQL builtins (each GRAPHQL adapter gets `slab_graphql_schema`, `slab_graphql_query`, `slab_graphql_mutation` automatically).\n\n**Post format**: Slab posts use a JSON content tree (Slate.js-like). Reading is straightforward; writing requires composing the AST OR using the markdown-import endpoint.\n\n**Topics = folders**: posts live in topics (hierarchical).\n\n**Out of scope here**: post-content editing via AST (use markdown import), integrations, billing.","region":"intl","category":"knowledge","icon":"slab","docsUrl":"https://help.slab.com/en/articles/3138084-slab-api","requiredEnvVars":["SLAB_API_TOKEN"],"toolCount":11,"authType":"BEARER_TOKEN"},{"slug":"snov","name":"Snov.io","description":"Drive Snov.io (lead enrichment + email finder + outreach) from any AI agent: email finder, verifier, domain search, prospect lists, drip campaigns. 9 tools, OAuth2 client-credentials auth.","instructions":"This connector uses the Snov.io API v1 (snov.io/api).\n\n**Setup**:\n1. Sign in to https://app.snov.io → **Account → API**.\n2. Copy the **Client ID** and **Client Secret**.\n3. Run OAuth2 client_credentials flow:\n   ```\n   POST https://api.snov.io/v1/oauth/access_token\n   grant_type=client_credentials&client_id=...&client_secret=...\n   ```\n   to obtain an access_token. Tokens are valid for 1 hour.\n4. Set `SNOV_ACCESS_TOKEN` to the access token. Refresh externally.\n\n**Authentication**: `Authorization: Bearer ${SNOV_ACCESS_TOKEN}`.\n\n**Credit model**: every find/verify/enrich consumes credits per your plan. `/balance` is free.\n\n**Workflow**: domain search → email finder → email verifier → add prospects to a list → drip campaign.\n\n**Out of scope here**: drip campaign content editing, LinkedIn extension, sender management, deals (Snov.io CRM lite).","region":"intl","category":"enrichment","icon":"snov","docsUrl":"https://snov.io/api","requiredEnvVars":["SNOV_ACCESS_TOKEN"],"toolCount":9,"authType":"BEARER_TOKEN"},{"slug":"sorare","name":"Sorare Fantasy Football","description":"GraphQL API for Sorare's NFT-based fantasy football, baseball, and basketball games. Query cards, players, lineups, transfer market, and your portfolio with natural-language commands. Handles Sorare's bcrypt-salted login and 30-day JWT caching automatically.","instructions":"## Authentication (handled automatically)\n\nSorare uses a custom two-step login the AnythingMCP `LOGIN_TOKEN` engine performs for you:\n\n1. `GET https://api.sorare.com/api/v1/users/{email}` returns the account's bcrypt salt.\n2. Your plain password is hashed locally with `bcrypt.hashSync(password, salt)`.\n3. The hash is sent through Sorare's `signIn` GraphQL mutation; Sorare returns a JWT valid for ~30 days, tagged with the audience claim `anythingmcp` (managed for you).\n4. Every subsequent call adds `Authorization: Bearer <jwt>` and `JWT-AUD: anythingmcp` headers.\n\nThe token is cached in-memory and in the encrypted `connector_auth_cache` table, then proactively re-issued ~24 h before expiry and on any 401. You never need to refresh manually.\n\n## Credentials\n\n- `SORARE_EMAIL` — your Sorare account email.\n- `SORARE_PASSWORD` — your plain account password (never stored or transmitted in plain text after the first login; only the bcrypt hash leaves your server).\n\n## 2FA\n\nIf your account has 2FA enabled, the `signIn` mutation will fail until you provide a fresh `otpAttempt`. For headless/server use we recommend creating a dedicated read-only Sorare account without 2FA. Set `SORARE_PASSWORD` to that account's password.\n\n## Money & pricing conventions — READ THIS FIRST\n\nSorare exposes amounts in **four parallel scales** on every `MonetaryAmount`:\n- `wei` → raw on-chain unit (1 ETH = 10^18 wei). String to avoid precision loss.\n- `eurCents`, `usdCents`, `gbpCents` → **integers in cents, divide by 100 for the currency unit.** Example: `eurCents: 354` means **€3.54**, not €354.\n- These can be `null` when the card is listed only in crypto (no fiat conversion exposed). When you see `eurCents: null`, fall back to `wei` (roughly: `wei * 1e-18 * <ETH/EUR>` for an EUR estimate; the live ETH/EUR rate is not provided by the API).\n\n### TokenOffer sides — easy to get wrong\n\nFor a **single-sale offer** (someone selling a card):\n- `senderSide.anyCards` = the cards being sold (sender = seller, sending the card).\n- `receiverSide.amounts` = the price the buyer pays (receiver = buyer, receiving the card).\n\nIf you query `senderSide.amounts` on a sale offer you'll get **zeros** because the seller isn't sending money. Always read prices from `receiverSide.amounts`.\n\n## When dedicated tools are not enough\n\nThe purpose-built tools below cover the most common workflows. For anything else use the generic helpers:\n- `sorare_graphql_schema` (no args) → compact summary of Query/Mutation + a flat index of every type.\n- `sorare_graphql_schema(type: \"TypeName\")` → just one type's definition.\n- `sorare_graphql_schema(search: \"keyword\")` → every type whose name or a field name matches.\n- `sorare_graphql_query` / `_mutation` / `_subscription` → execute arbitrary documents.\n\n**GraphQL introspection (`__schema` / `__type`) is disabled on Sorare's production endpoint.** Use `sorare_graphql_schema(type: \"…\")` instead.\n\n## Useful field paths the schema search won't surface obviously\n\n- `Player.lowestPriceAnyCard(rarity, inSeason)` → floor card for a player at a rarity. (Wrapped by `sorare_player_floor_price`.)\n- `Player.so5Scores(last, position?)` → recent So5 scores for form analysis. (Wrapped by `sorare_player_recent_scores`.)\n- `tokens.tokenPrices(playerSlug, rarity, first, season?)` → recent sale history for a player+rarity, in fiat + wei. (Wrapped by `sorare_token_prices`.)\n- `tokens.liveSingleSaleOffers(playerSlug?, sport?, first)` → current secondary market. (Wrapped by `sorare_live_sale_offers`.)\n- `currentUser.cards(first, rarities, sport)` → your inventory. NOT `currentUser.football.myCards` (that path doesn't exist).\n- `currentUser.availableBalances` → wallet in wei + EUR + USD + GBP. (Wrapped by `sorare_wallet_balance`.)\n- For free-text player search use the root `searchPlayers(query, pageSize)` then drill via `commonPlayerHits { anyPlayer { ... on Player { ... } } }`. There is no `football.players(search:…)` — that path doesn't exist.\n\n## Sport / season / rarity enum quirks\n\n- `Sport` is upper-snake: `FOOTBALL`, `BASEBALL`, `NBA`.\n- `Rarity` is lowercase: `common`, `limited`, `rare`, `super_rare`, `unique`, `custom_series` (not the upper-snake form).\n- `season` arguments are season **start years**: 2024 means the 2024-25 season.\n- Older-vintage cards (pre-current-season) still score normally in So5 Classic competitions; the vintage mainly matters for the Captain Bonus and for season-eligibility tournaments.\n\n## Rate limits\n\nSorare enforces per-IP and per-token rate limits (`429`). Heavy bulk-export workflows should batch and back-off. Very large GraphQL responses (hundreds of items × deep selection) may also time out — split the request.\n\n## Useful starter prompts\n\n- \"What's my Sorare wallet balance?\" → `sorare_wallet_balance`\n- \"What's the floor price for a Limited Calafiori right now?\" → `sorare_player_floor_price(playerSlug, rarity:\"limited\")`\n- \"What did Messi rare cards sell for in the last month?\" → `sorare_token_prices(playerSlug, rarity:\"rare\", first:30)`\n- \"Show me my Limited cards for Top-5-league players.\" → `sorare_list_my_cards(rarities:[\"limited\"])`\n- \"Is this player in form?\" → `sorare_player_recent_scores(playerSlug, last:10)`\n- \"How am I doing in So5 overall?\" → `sorare_my_trophies_summary(sport:\"FOOTBALL\")`","region":"intl","category":"gaming","icon":"sorare","docsUrl":"https://github.com/sorare/api","requiredEnvVars":["SORARE_EMAIL","SORARE_PASSWORD"],"toolCount":19,"authType":"LOGIN_TOKEN","featured":true,"priority":100},{"slug":"statsig","name":"Statsig","description":"Drive Statsig (feature flags + experiments + analytics) from any AI agent: evaluate gates/dynamic configs/experiments, log events, manage console-side gates and experiments. 10 tools, server-secret-key auth.","instructions":"This connector uses the Statsig HTTP API (docs.statsig.com).\n\n**Two distinct APIs**:\n  - **Server SDK API** (`api.statsig.com/v1/...`) — runtime evaluation + event logging. Requires `STATSIG_SERVER_SECRET_KEY` (starts with `secret-`).\n  - **Console API** (`statsigapi.net/console/v1/...`) — admin operations like creating gates. Requires `STATSIG_CONSOLE_API_KEY` (starts with `console-`).\nThe adapter uses the Server SDK base by default; tools that hit the Console API set explicit absolute URLs in their endpointMapping.\n\n**Setup**:\n1. Sign in to https://console.statsig.com → **Settings → Keys & Environments**.\n2. Copy the **Server Secret Key** (`secret-...`) for runtime ops.\n3. Copy a **Console API Key** (`console-...`) for admin ops (Settings → Project Settings → API Keys → Create Console API Key).\n4. Set `STATSIG_SERVER_SECRET_KEY` and (optionally, for admin tools) `STATSIG_CONSOLE_API_KEY`.\n\n**Authentication**: Server SDK uses `statsig-api-key: ${SERVER_SECRET}` header. Console uses `STATSIG-API-KEY: ${CONSOLE_KEY}` header.\n\n**Statsig-Client-Time header**: server SDK endpoints prefer a `STATSIG-CLIENT-TIME` header (Unix ms) — Statsig uses for evaluation timing. Skip for simple cases.\n\n**User object**: every gate/config/experiment evaluation needs a `user` object with at minimum `userID` (your stable user ID). Add `email`, `country`, `appVersion`, `custom` for targeting accuracy.\n\n**Out of scope here**: Layers API (experiment layers), holdouts, GitHub integration, audit log, project membership management.","region":"intl","category":"analytics","icon":"statsig","docsUrl":"https://docs.statsig.com/server-core/http-api/","requiredEnvVars":["STATSIG_SERVER_SECRET_KEY"],"toolCount":10,"authType":"API_KEY"},{"slug":"streak","name":"Streak","description":"Manage Streak (CRM inside Gmail) pipelines, boxes, contacts, fields from any AI agent. 9 tools, basic-auth with API key.","instructions":"This connector wraps the Streak REST API v1/v2 (api.streak.com/api).\n\n**Setup**:\n1. Sign in to https://www.streak.com → top-right gear → **Settings → API keys → Generate API key**.\n2. Copy the key. Set `STREAK_API_KEY`.\n\n**Authentication**: HTTP Basic — API key is the username, password is empty:\n  `Authorization: Basic base64(API_KEY:)`\n\n**Streak vocabulary**:\n- **Pipeline** = a CRM workflow (e.g. 'Sales', 'Hiring').\n- **Box** = a record/deal/case inside a pipeline.\n- **Stage** = pipeline column (e.g. 'Lead', 'Qualified', 'Closed Won').\n- **Field** = custom field on a pipeline (definition) or box (value).\n\n**Two API versions**: v1 covers everything; v2 has a few newer write endpoints with cleaner shapes (see `pipelines/v2`).\n\n**IDs are URL-safe strings** (e.g. `agxzfm1haWxmb29nYWVyEAsSBE5vdGUYgIDA88-IpAoMogEFc3RyZWFr`).\n\n**Pagination**: `limit` + `sortDirection`; some endpoints use `lastId` cursor.\n\n**Rate limits**: 600 req/hour per API key; 10 burst. 429 → back off 6s.\n\n**Out of scope here**: snippets (email templates), team management, billing.","region":"intl","category":"crm","icon":"streak","docsUrl":"https://streak.readme.io/reference/","requiredEnvVars":["STREAK_API_KEY"],"toolCount":9,"authType":"BASIC_AUTH"},{"slug":"substack","name":"Substack","description":"Read Substack publication content, posts, comments, podcast episodes via public RSS/JSON feeds. 5 tools, no auth required.","instructions":"This connector uses Substack's PUBLIC content endpoints (Substack does not yet publish a formal REST API for writes — programmatic post creation/comments require the legacy session-cookie API which isn't supported here).\n\n**Setup**: NO API KEY. Set `SUBSTACK_PUBLICATION_URL` = the publication's base URL (e.g. `https://lennysnewsletter.substack.com`). For tools that target a specific publication, the URL is taken from this env var.\n\n**Authentication**: NONE. All reads use public endpoints (the same JSON Substack's own site fetches).\n\n**Content endpoints available**:\n  - `/api/v1/posts?limit=N&offset=M` — paginated posts list (each post: id, title, slug, post_date, audience, type)\n  - `/api/v1/posts/by-id/{id}` — single post detail\n  - `/api/v1/comments/{post_id}` — top comments on a post\n  - `/api/v1/podcast/feed` — podcast episodes (audio newsletters only)\n  - `/feed` — standard RSS feed\n\n**Out of scope here**: creating posts (no public write API), email subscribers list, paid-subscriber management, comment moderation. All UI-only as of 2025.\n\n**Rate limits**: Substack doesn't publish numbers; be polite (1 req/sec recommended) and cache aggressively. They'll throttle abusive IPs.","region":"intl","category":"publishing","icon":"substack","docsUrl":"https://substack.com/help/articles/4445-substack-content-api","requiredEnvVars":["SUBSTACK_PUBLICATION_URL"],"toolCount":5,"authType":"NONE"},{"slug":"surveymonkey","name":"SurveyMonkey","description":"Drive SurveyMonkey from any AI agent: surveys, responses, collectors, contacts. 8 tools, OAuth2 Bearer auth.","instructions":"This connector uses the SurveyMonkey API v3 (api.surveymonkey.com/v3).\n\n**Setup**:\n1. Register at https://developer.surveymonkey.com → **Add new app** → Private app.\n2. Pick scopes: Surveys (Read), Responses (Read), Collectors (Read+Write), Contacts (Read+Write), Webhooks (Read+Write).\n3. Run the OAuth2 flow to obtain an access token. Set `SURVEYMONKEY_ACCESS_TOKEN`.\n4. SurveyMonkey tokens are LONG-LIVED — but can be revoked by user via app dashboard.\n\n**Authentication**: `Authorization: Bearer ${SURVEYMONKEY_ACCESS_TOKEN}`.\n\n**Survey vs Collector vs Response**:\n  - Survey: the question design.\n  - Collector: a distribution channel (weblink/email/popup/embed) attached to a survey.\n  - Response: a submission to a collector.\n\n**Quirky response shape**: each response has `pages[]` → `questions[]` → `answers[]`. Answer shape varies by question type (single_choice, multiple_choice, text, etc.). Cross-reference with `surveymonkey_get_survey_details` to map answer choice IDs to display text.\n\n**Pagination**: `?page=N&per_page=M` (max 1000 for some endpoints).\n\n**Rate limits**: 500 req/day on Free tier, scales with paid plans. 60 req/min throttle. On 429 honor Retry-After.\n\n**Out of scope here**: survey CRUD (use the SurveyMonkey designer), library themes, A/B testing, sentiment analysis built-ins.","region":"intl","category":"forms","icon":"surveymonkey","docsUrl":"https://developer.surveymonkey.com/api/v3/","requiredEnvVars":["SURVEYMONKEY_ACCESS_TOKEN"],"toolCount":8,"authType":"BEARER_TOKEN"},{"slug":"tally","name":"Tally","description":"Read Tally form submissions and manage forms/workspaces from any AI agent. 6 tools, Bearer-token auth. The modern free-tier-friendly alternative to Typeform.","instructions":"This connector uses the Tally API (developers.tally.so).\n\n**Setup**:\n1. Sign in to https://tally.so → top-right avatar → **Settings → API → Create API key**.\n2. Copy the key (starts with `tly-`). Set `TALLY_API_KEY`.\n\n**Authentication**: `Authorization: Bearer ${TALLY_API_KEY}`.\n\n**Forms and responses**: each form has an alphanumeric ID (e.g. `wbN0Wd`). Responses to a form are returned as an array of `{questionId, answer, type}` per submission.\n\n**Pagination**: cursor-based with `?page=N&limit=M` for submissions. Default 50 per page, max 100.\n\n**Webhooks** out of scope (configure in Tally UI to point at your hosted endpoint).\n\n**Out of scope here**: creating/editing forms (Tally's editor is GUI-only and rich), file uploads, custom integrations.","region":"intl","category":"forms","icon":"tally","docsUrl":"https://developers.tally.so/api-reference/","requiredEnvVars":["TALLY_API_KEY"],"toolCount":6,"authType":"BEARER_TOKEN"},{"slug":"teamwork-projects","name":"Teamwork Projects","description":"Manage Teamwork.com (projects, tasks, milestones, time entries, comments, people) from any AI agent. 10 tools, basic-auth with API key.","instructions":"This connector wraps the Teamwork Projects REST API v3 (per-subdomain — yoursubdomain.teamwork.com/projects/api/v3).\n\n**Setup**:\n1. Log into your Teamwork account → top-right avatar → **Edit my details → API & Mobile → Get my API Key**.\n2. Note your subdomain (the part before `.teamwork.com`).\n3. Set `TEAMWORK_SUBDOMAIN` and `TEAMWORK_API_KEY`.\n\n**Authentication**: HTTP Basic — API key as username, literal `x` as password.\n\n**Per-tenant baseUrl**: `https://${TEAMWORK_SUBDOMAIN}.teamwork.com/projects/api/v3`. Substituted at import time.\n\n**API versions**: v3 is the modern REST. v1/v2 still exist for some endpoints. This adapter uses v3 where available.\n\n**Pagination**: `page` (1-based) + `pageSize` (max 250). Some endpoints use `pageOffset`.\n\n**Rate limits**: 150 req/min per token. 429 with `Retry-After`.\n\n**Out of scope here**: Spaces (separate product API), CRM, Desk (helpdesk), Chat — each is a sibling product with its own API.","region":"intl","category":"project-management","icon":"teamwork-projects","docsUrl":"https://apidocs.teamwork.com/","requiredEnvVars":["TEAMWORK_SUBDOMAIN","TEAMWORK_API_KEY"],"toolCount":10,"authType":"BASIC_AUTH"},{"slug":"telegram-bot","name":"Telegram Bot","description":"Send Telegram messages, photos, documents, audio, location and polls from any AI agent via the Telegram Bot API. 14 tools, bot-token auth. Outbound + lightweight read of recent updates (no long-polling).","instructions":"This connector uses the official Telegram Bot API (https://core.telegram.org/bots/api).\n\n**Setup**:\n1. In Telegram, open chat with **@BotFather** → `/newbot` → pick a display name and a username ending in `bot`.\n2. BotFather replies with an HTTP API token like `123456789:ABCDEFghijklmnopqrstuvwxyz`. **Treat as a secret** — anyone with it can send as your bot.\n3. Set `TELEGRAM_BOT_TOKEN` to the full token.\n\n**Authentication model** (Telegram-specific): the bot token goes in the URL path, NOT in a header. The base URL is `https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}` and every endpoint is appended as `/methodName`. The adapter substitutes the token via the `{{TELEGRAM_BOT_TOKEN}}` env-var template in `baseUrl`.\n\n**chat_id model**: every Telegram chat (user, group, channel) has a numeric `chat_id`. For groups and channels the bot must be ADDED first; for users, the user must have sent a `/start` to the bot at least once (Telegram's privacy rule). Once you have a chat_id (extract it from `getUpdates`), pin it.\n\n**Channels**: for **public channels** you can also pass `@channelusername` (with the `@`) instead of a numeric chat_id. Private channels REQUIRE the numeric ID, which always starts with `-100`.\n\n**Markdown vs HTML**: messages support 3 parse modes — `MarkdownV2` (current, escape special chars), `HTML` (`<b>`, `<i>`, `<a href>`), or no formatting. Telegram's `MarkdownV2` requires escaping `_ * [ ] ( ) ~ ` > # + - = | { } . !` — agents that don't escape will get 400 'can't parse entities'. The HTML mode is easier for agents to compose safely.\n\n**File send model**: media tools (sendPhoto, sendDocument, sendAudio, etc.) accept the media as:\n  - **HTTPS URL** (recommended on AnythingMCP): Telegram fetches it server-side. URL must be ≤ 5MB for photos, ≤ 20MB for documents via URL.\n  - **file_id**: a string returned from a previous send (caching — reuse the same file_id to re-send the same content without re-uploading).\n  - **multipart binary**: NOT supported by this connector in a single tool call. Pre-upload elsewhere and pass the resulting URL or file_id.\n\n**getUpdates vs webhooks**: this connector exposes `telegram_get_updates` (long-polling pull) for one-shot reading of recent inbound messages. For continuous inbound stream (chatbot), use Telegram's webhook (setWebhook) and host the receiver yourself — outside the MCP request/response model.\n\n**Rate limits**: 30 messages/sec to different chats, 1 msg/sec to the same chat, 20 messages/minute to the same group. On 429, honor the `retry_after` in the response.\n\n**Out of scope**: payments, inline mode, callback query answers (these usually require a long-running webhook), passport, game scores, sticker management.","region":"intl","category":"messaging","icon":"telegram","docsUrl":"https://core.telegram.org/bots/api","requiredEnvVars":["TELEGRAM_BOT_TOKEN"],"toolCount":13,"authType":"NONE"},{"slug":"ticktick","name":"TickTick","description":"Drive TickTick (cross-platform task manager) from any AI agent: projects, tasks, completed-tasks reporting. 6 tools, OAuth2 Bearer auth.","instructions":"This connector uses the TickTick Open API v1 (developer.ticktick.com).\n\n**Setup**:\n1. Register an app at https://developer.ticktick.com → **Manage Apps → New App**.\n2. Note **Client ID** and **Client Secret**, and configure a redirect URL.\n3. Run OAuth2 authorization-code flow with scopes `tasks:read tasks:write`.\n4. Set `TICKTICK_ACCESS_TOKEN` to the obtained token (lifetime varies; refresh externally).\n\n**Authentication**: `Authorization: Bearer ${TICKTICK_ACCESS_TOKEN}`.\n\n**Project hierarchy**: Inbox + user-created projects (lists) → tasks → subtasks (items).\n\n**Date format**: ISO 8601 with timezone (e.g. `2026-03-15T15:30:00+0000`).\n\n**Priority**: 0 (none), 1 (low), 3 (medium), 5 (high).\n\n**Recurring tasks**: use `repeatFlag` with iCalendar RRULE syntax.\n\n**Out of scope here**: pomodoro, habits, calendar import/export, tags management (TickTick doesn't expose full tag CRUD).","region":"intl","category":"project-management","icon":"ticktick","docsUrl":"https://developer.ticktick.com/api","requiredEnvVars":["TICKTICK_ACCESS_TOKEN"],"toolCount":6,"authType":"BEARER_TOKEN"},{"slug":"tidio","name":"Tidio","description":"Manage Tidio (live chat + AI chatbot) contacts, conversations, messages, tags via GraphQL from any AI agent. 7 tools, X-Tidio-Openapi-Token auth.","instructions":"This connector wraps the Tidio Public API (api.tidio.co/v1/graphql).\n\n**Setup**:\n1. Log into https://www.tidio.com → **Settings → Public API** (Tidio+ plan only).\n2. Generate an API token. Set `TIDIO_API_TOKEN`.\n\n**Authentication**: custom header `X-Tidio-Openapi-Token: ${TIDIO_API_TOKEN}` on every request.\n\n**GraphQL-only**: Tidio's Public API is GraphQL — the adapter exposes a few common queries/mutations as wrappers; for ad-hoc queries use the auto-injected `tidio_graphql_query` / `tidio_graphql_mutation` / `tidio_graphql_schema` builtins.\n\n**Visitor vs Contact**: Tidio tracks anonymous visitors (no email) and contacts (have email/identifier). Bind a visitor to a contact via `identify`.\n\n**Pagination**: cursor-based via Relay edges: `edges[].node`, `pageInfo {endCursor, hasNextPage}`.\n\n**Rate limits**: 10 req/sec per token + complexity budget. 429 with `Retry-After`.\n\n**Out of scope here**: chatbot flow editor, broadcast scheduling, A/B testing — these are UI-only.","region":"intl","category":"support","icon":"tidio","docsUrl":"https://docs.tidio.com/public-api/","requiredEnvVars":["TIDIO_API_TOKEN"],"toolCount":12,"authType":"API_KEY"},{"slug":"timetastic","name":"Timetastic","description":"Manage Timetastic (PTO / annual leave tracking) users, holidays, departments, leave types from any AI agent. 8 tools, Bearer token.","instructions":"This connector wraps the Timetastic REST API v2 (app.timetastic.co.uk/api).\n\n**Setup**:\n1. Log into https://app.timetastic.co.uk → top-right avatar → **Settings → Integrations → API → Generate API token**.\n2. Set `TIMETASTIC_API_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${TIMETASTIC_API_TOKEN}`.\n\n**Entities**: `User` (employees) → `Holiday` (leave requests). Each holiday has start/end, type (annual, sickness, etc.), status (approved/declined/pending).\n\n**Pagination**: most endpoints return everything (paginated only by `Start`/`End` filters). Use date windows aggressively.\n\n**Rate limits**: 60 req/min per token. 429 with `Retry-After`.\n\n**Out of scope here**: WallChart UI, custom reports, multi-tenant org switching.","region":"intl","category":"time-tracking","icon":"timetastic","docsUrl":"https://timetastic.docs.apiary.io/","requiredEnvVars":["TIMETASTIC_API_TOKEN"],"toolCount":8,"authType":"BEARER_TOKEN"},{"slug":"todoist","name":"Todoist","description":"Drive Todoist (personal/team task manager) from any AI agent: projects, tasks, comments, labels, sections. 12 tools, Bearer token auth, REST API v2.","instructions":"This connector uses the Todoist API v1 (the modern unified API — the older `/rest/v2` and `/sync/v9` are deprecated).\n\n**Setup**:\n1. Sign in to https://todoist.com → top-right avatar → **Settings → Integrations → Developer → API token → Copy**.\n2. Set `TODOIST_API_TOKEN` to it.\n\n**Authentication**: `Authorization: Bearer ${TODOIST_API_TOKEN}`. The token is per-user; everything done with it appears as that user's actions. Personal API tokens never expire.\n\n**Hierarchy**: Project → Section (optional) → Task → Sub-task. Tasks can also live directly in a project without a section. The Inbox is a special project (`inbox_project=true`).\n\n**Date strings**: Todoist accepts natural language for `due_string` (e.g. 'tomorrow at noon', 'every monday 9am', 'in 3 days', 'next friday') OR explicit `due_date` (YYYY-MM-DD) / `due_datetime` (ISO 8601 RFC 3339). For recurring tasks, the natural-language form is required to set recurrence rules.\n\n**Priorities**: 1-4 in the API (1=lowest, 4=urgent). The Todoist UI shows them inverted (P1 in UI = priority 4 in API).\n\n**Filters**: when listing tasks via `todoist_get_active_tasks`, the `filter` parameter accepts Todoist's filter syntax: 'today', 'overdue', 'p1 & @work', 'due before: +7 days', etc.\n\n**Pagination**: not used — the REST API returns full lists (sometimes thousands of items). Use filters to narrow.\n\n**Rate limits**: 1000 requests per 15 min per user. On 429 back off.\n\n**Sync API not exposed here**: Todoist also has a Sync API (single batch endpoint that returns all data at once) — useful for full local mirrors but more complex. This connector uses the simpler REST endpoints.\n\n**Out of scope here**: webhooks, attachments upload, project sharing/collaboration changes (only show collaborators), karma stats, premium-only filters management.","region":"intl","category":"project-management","icon":"todoist","docsUrl":"https://developer.todoist.com/rest/v2","requiredEnvVars":["TODOIST_API_TOKEN"],"toolCount":12,"authType":"BEARER_TOKEN"},{"slug":"toggl-track","name":"Toggl Track","description":"Manage Toggl Track (time entries, projects, clients, tags, workspaces) from any AI agent. 9 tools, basic-auth with API token.","instructions":"This connector wraps the Toggl Track API v9 (api.track.toggl.com/api/v9).\n\n**Setup**:\n1. Log into https://track.toggl.com → bottom-left avatar → **Profile settings** → scroll to **API Token** → reveal/copy.\n2. Set `TOGGL_API_TOKEN`.\n\n**Authentication**: HTTP Basic, with API token as the username and the literal string `api_token` as the password:\n  `Authorization: Basic base64(TOKEN:api_token)`\nThe adapter sets this automatically via BASIC_AUTH (username=token, password=api_token). DO NOT pass real user/password — Toggl only accepts the token-pair.\n\n**Workspace IDs**: Toggl Track is workspace-scoped. Most endpoints need a `workspace_id`. Use `toggl_track_me` first — its response contains `default_workspace_id` and `workspaces[].id`.\n\n**Running timer**: Toggl allows exactly ONE running entry per user at a time. Starting a new one stops any prior. To start, POST a time entry with `duration: -1` and `start: <ISO now>`. To stop, PATCH the entry to set `stop: <ISO>` and `duration: <seconds>`.\n\n**Dates**: ISO 8601 with timezone (`2026-05-20T14:30:00+00:00`). Toggl is strict about timezone — naive datetimes get rejected.\n\n**Rate limits**: 1 req/s per IP soft, burst tolerated. 429 with `Retry-After` for hard throttling.\n\n**Out of scope here**: Toggl Reports v3 (different host, paid plans get more — could be a sibling adapter), team management, billing.","region":"intl","category":"time-tracking","icon":"toggl-track","docsUrl":"https://engineering.toggl.com/docs/","requiredEnvVars":["TOGGL_API_TOKEN"],"toolCount":9,"authType":"BASIC_AUTH"},{"slug":"trello","name":"Trello","description":"Drive Trello (Kanban boards) from any AI agent: boards, lists, cards, members, labels, checklists, attachments-by-URL. 13 tools. API key + user token query-string auth (Trello-specific).","instructions":"This connector uses the Trello REST API v1.\n\n**Setup**:\n1. Sign in to Trello → go to https://trello.com/power-ups/admin → **+ New** to create a Power-Up (this is just the modern way to mint API keys).\n2. After creation, open the Power-Up → **API key** section → copy the **API key**.\n3. Below it, click **Token** → authorize the Power-Up → copy the generated user **Token**.\n4. Set:\n   - `TRELLO_API_KEY` = the Power-Up key (a long alphanumeric)\n   - `TRELLO_TOKEN` = the user token (much longer)\n\n**Authentication**: query-string `?key=${TRELLO_API_KEY}&token=${TRELLO_TOKEN}` on every request. The token is per-user — actions are attributed to that user. To act as a different user, mint a separate token via their Trello account.\n\n**Hierarchy**: Workspace (Organization) → Board → List → Card. Cards have members[], labels[], checklists[], attachments[], comments (= actions of type commentCard).\n\n**ID format**: 24-character hex (e.g. `abc123def456789012345678`). Boards / lists / cards / members all use this format. Discover board IDs via `trello_list_my_boards` → list IDs via `trello_get_board_lists` → card IDs via `trello_list_cards_in_list`.\n\n**`fields` parameter**: virtually every endpoint accepts `?fields=all` or `?fields=comma,separated,list`. Default returns a sensible subset — for full payloads pass `fields=all`.\n\n**Position values**: lists and cards have a `pos` (float) for ordering. `pos=top` or `pos=bottom` shortcuts work for moves; otherwise pass an explicit number between the neighbors' positions.\n\n**Labels**: are board-level. A label has color (green/yellow/orange/red/purple/blue/sky/lime/pink/black/null) + name. Cards reference labels by their ID. Use `trello_list_board_labels` to discover IDs.\n\n**Attachments**: upload via multipart not supported in single call. Use URL attachments via the `url` parameter — Trello fetches it.\n\n**Webhooks** out of scope.\n\n**Rate limits**: 100 req per 10 sec per API key, 300 per 10 sec per token. Returns 429 with `X-Rate-Limit-Api-Key-Remaining` header.\n\n**Out of scope here**: Power-Up actions, custom fields (Power-Up only), board backgrounds, voting, plugin data, butler automations.","region":"intl","category":"project-management","icon":"trello","docsUrl":"https://developer.atlassian.com/cloud/trello/rest/","requiredEnvVars":["TRELLO_API_KEY","TRELLO_TOKEN"],"toolCount":13,"authType":"QUERY_AUTH"},{"slug":"typeform","name":"Typeform","description":"Read Typeform responses, list forms, fetch form definitions and manage workspaces from any AI agent. 10 tools, Personal Token Bearer auth. Optimized for read+analysis flows (the heavy form-builder write side is out of scope).","instructions":"This connector uses the Typeform Create/Responses API.\n\n**Setup**:\n1. Sign in to Typeform → top-right avatar → **Settings → Personal tokens → Generate a new token**.\n2. Grant the scopes you need — at minimum `forms:read`, `responses:read`, `workspaces:read`. For write operations add `forms:write`. The connector's `instructions` documents what scopes each tool requires implicitly.\n3. Copy the token (shown ONCE). Set `TYPEFORM_PERSONAL_TOKEN`.\n\n**Authentication**: Bearer token. Same token for all endpoints.\n\n**Form IDs**: each form has an 8-character alphanumeric ID (e.g. `Wf2hrM`), visible at the end of the form's public URL (`yourname.typeform.com/to/Wf2hrM` → ID is `Wf2hrM`). Use `typeform_list_forms` once to discover IDs you own.\n\n**Responses model**: Typeform stores each submission as a 'response' with `landed_at`, `submitted_at`, `answers[]`. Each answer is keyed by the field's `id` (UUID) AND by a `type` (text/email/multiple_choice/number/...) — so reading answers requires knowing the form's fields. Cross-reference with `typeform_get_form` to map field IDs to user-readable titles.\n\n**Pagination for responses**: `typeform_list_responses` accepts `since`/`until` timestamps or `before`/`after` token cursors. Default page_size 25, max 1000. For large exports, prefer date-range pagination over token cursors.\n\n**Incremental sync pattern**: store the highest `submitted_at` you've processed and use it as `since` on the next call. Typeform sorts responses newest-first by default — set `sort=submitted_at,asc` to walk forward.\n\n**Webhooks** out of scope (Typeform pushes on submission to a URL you host).\n\n**Hidden fields**: the `hidden` object on a response captures URL parameters passed to the form (e.g. `?utm_source=newsletter`). Read them via `responses[].hidden`.\n\n**Forms with logic / outcomes**: scoring branches, calculator outputs, and ranking results appear in `responses[].calculated` and `responses[].metadata`. Score-based quizzes typically use `calculated.score`.\n\n**Rate limits**: 2 requests/sec per token (Typeform default), 10000/day. On 429, back off — `Retry-After` header tells you how long.\n\n**Out of scope here**: creating/editing form structure (use the Typeform UI; the API for `forms:write` exists but the JSON tree is dense and rarely worth automating), images/themes upload, custom workspaces beyond list.","region":"intl","category":"forms","icon":"typeform","docsUrl":"https://www.typeform.com/developers/","requiredEnvVars":["TYPEFORM_PERSONAL_TOKEN"],"toolCount":10,"authType":"BEARER_TOKEN"},{"slug":"uptime-robot","name":"UptimeRobot","description":"Manage UptimeRobot (uptime monitoring) monitors, alert contacts, maintenance windows, public status pages from any AI agent. 8 tools, API-key auth.","instructions":"This connector wraps the UptimeRobot API v2 (api.uptimerobot.com/v2).\n\n**Setup**:\n1. Sign in to https://uptimerobot.com → **My Settings → API Settings**.\n2. Generate the **Main API Key** (full access to your monitors) OR a per-monitor read-only key. Most users want the Main key.\n3. Set `UPTIMEROBOT_API_KEY`.\n\n**Authentication**: every request POSTs to /v2/* with `api_key=...` injected as a query parameter on the URL. The API accepts the key either in the URL or in the body — this adapter uses the URL so each tool's body remains clean form-encoded params. We also always send `format=json` so responses are JSON instead of XML.\n\n**Monitor types** (integer codes):\n- 1: HTTP(s)\n- 2: Keyword (HTTP body must/must-not contain string)\n- 3: Ping (ICMP)\n- 4: Port (TCP)\n- 5: Heartbeat (cron-style — your job pings UptimeRobot every N minutes)\n\n**Status codes** (integer):\n- 0: paused\n- 1: not checked yet\n- 2: up\n- 8: seems down\n- 9: down\n\n**Pagination**: `offset` (0-based) + `limit` (max 50). Total returned in the `pagination.total` field.\n\n**Rate limits**: 10 req/min per API key on the free plan; higher on paid. 429 has no Retry-After — back off 6s.\n\n**Out of scope here**: subscription management, agent / probe location selection (paid feature), white-label status page customization.","region":"intl","category":"monitoring","icon":"uptime-robot","docsUrl":"https://uptimerobot.com/api/","requiredEnvVars":["UPTIMEROBOT_API_KEY"],"toolCount":8,"authType":"QUERY_AUTH"},{"slug":"vercel-analytics","name":"Vercel Analytics","description":"Read Vercel Analytics / Speed Insights / Audience data via the Vercel API. 4 tools, Bearer auth.","instructions":"This connector uses the Vercel Platform API (vercel.com/docs/rest-api).\n\n**Setup**:\n1. Sign in to https://vercel.com → top-right avatar → **Settings → Tokens → Create Token**.\n2. Pick scope (account-level or team-level). Set `VERCEL_ACCESS_TOKEN`.\n3. For team-scoped queries also set `VERCEL_TEAM_ID` (visible in Team Settings).\n\n**Authentication**: `Authorization: Bearer ${VERCEL_ACCESS_TOKEN}`.\n\n**Note**: Vercel's Web Analytics + Speed Insights data endpoints went through major changes in 2024-2025. Some endpoints are paywall/plan-gated. The adapter uses the stable public endpoints; some analytics queries require Pro+ plan.\n\n**Pagination**: cursor-based via `until` Unix ms (return items older than this).\n\n**Out of scope here**: deployments/builds CRUD (large surface, separate connector if needed), Edge Config, KV/Postgres data, Edge Functions logs.","region":"intl","category":"analytics","icon":"vercel","docsUrl":"https://vercel.com/docs/rest-api","requiredEnvVars":["VERCEL_ACCESS_TOKEN"],"toolCount":4,"authType":"BEARER_TOKEN"},{"slug":"wave-accounting","name":"Wave Accounting","description":"Query Wave Accounting (customers, products, invoices, accounts, transactions) via GraphQL from any AI agent. 8 tools, Bearer token auth.","instructions":"This connector wraps the Wave GraphQL API (gql.waveapps.com/graphql/public).\n\n**Setup**:\n1. Sign in to https://my.waveapps.com → bottom-left avatar → **Manage Applications → Create Application**.\n2. Use the OAuth flow to obtain an access token, OR (faster) generate a **Full Access Token** from the application settings (single-tenant).\n3. **Business ID**: Wave is multi-business — find your business ID via the `wave_get_businesses` query or in the URL of any Wave page.\n4. Set `WAVE_ACCESS_TOKEN` and `WAVE_BUSINESS_ID`.\n\n**Authentication**: `Authorization: Bearer ${WAVE_ACCESS_TOKEN}`.\n\n**GraphQL-only**: Wave has no REST. The auto-injected GraphQL builtins (`wave_accounting_graphql_query`, `wave_accounting_graphql_mutation`, `wave_accounting_graphql_schema`) are available for arbitrary queries. The typed wrappers below cover the most common cases.\n\n**Cursor pagination**: edges + pageInfo {endCursor, hasNextPage}. Pass `after: \"<cursor>\"` to paginate.\n\n**Money** is `{value, currency}` objects with `value` as a string in minor units (cents).\n\n**Rate limits**: 60 req/min per token + complexity budget. 429 with `Retry-After`.\n\n**Out of scope here**: payroll, payment-processing setup, bank-feed reconciliation UI.","region":"intl","category":"accounting","icon":"wave-accounting","docsUrl":"https://developer.waveapps.com/hc/en-us/articles/360019968212","requiredEnvVars":["WAVE_ACCESS_TOKEN","WAVE_BUSINESS_ID"],"toolCount":13,"authType":"BEARER_TOKEN"},{"slug":"whatsapp-business","name":"WhatsApp Business Cloud API","description":"Send WhatsApp messages (text, templates, images, audio/voice notes, video, documents, location, interactive buttons) from a WhatsApp Business account using Meta's Cloud API. Free tier of 1000 service conversations per month per business account.","instructions":"This connector uses Meta's WhatsApp Business Cloud API (Graph API v22.0).\n\n**Setup**:\n1. Go to https://developers.facebook.com/ → create or pick an App → add the **WhatsApp** product.\n2. Under WhatsApp → API Setup, you find: a temporary 24h access token (for testing), the test **Phone Number ID**, and the **WhatsApp Business Account ID** (WABA ID).\n3. For production, generate a **permanent System User access token** at Meta Business Suite → Business Settings → System Users → add user → assign the WhatsApp Business Account → generate token with `whatsapp_business_messaging` and `whatsapp_business_management` permissions.\n4. Paste the token as `WHATSAPP_ACCESS_TOKEN` and the WABA ID as `WHATSAPP_BUSINESS_ACCOUNT_ID`.\n\n**Phone Number ID**: every business account has one or more sending phone numbers, each identified by a `phoneNumberId`. Call `whatsapp_list_phone_numbers` once after setup to discover the IDs available on your WABA. Every send tool requires `phoneNumberId` — the connector does NOT auto-resolve a default, you must pass it explicitly on each call.\n\n**Recipient format**: the `to` field is the recipient's phone number in **international format without the `+` sign, country code first** (e.g. `15551234567` for the US, `4915151234567` for Germany).\n\n**Templates vs free-form text**:\n- Outside the **24-hour customer service window**, you can ONLY send pre-approved **template messages** (`whatsapp_send_template_message`). Templates must be created and approved in Meta Business Suite before they can be used.\n- Inside the 24-hour window (i.e. the user has messaged your number in the last 24h), you can send free-form text, media, interactive messages, location, etc.\n\n**Sending media (image / audio / voice / video / document)**: WhatsApp accepts media in two ways:\n  1. **By public URL** (recommended on AnythingMCP): use the per-type tools (`whatsapp_send_image`, `whatsapp_send_audio`, `whatsapp_send_video`, `whatsapp_send_document`) and pass `link` = a publicly accessible HTTPS URL. The URL must be reachable from Meta's servers and respect WhatsApp size limits (image 5 MB, audio/voice 16 MB, video 16 MB, document 100 MB).\n  2. **By uploaded media ID**: upload a binary first to `/PHONE_NUMBER_ID/media` (multipart/form-data with a real file) to obtain a `media_id`, then reference it in a send call. AnythingMCP's REST engine does not currently orchestrate the binary upload step in a single tool — for this flow either pre-upload via your own infrastructure and pass the resulting `mediaId` to the per-type send tools, or stick to the URL-based path above.\n\n**Voice notes specifically**: use `whatsapp_send_audio` with an OGG-Opus or AMR file. WhatsApp renders OGG-Opus as a true voice message (waveform + play button) in the client.\n\n**Cost / quota**: WhatsApp pricing is per **conversation** (24-hour session), not per message. Marketing, utility and authentication conversations are priced differently per country — see https://developers.facebook.com/docs/whatsapp/pricing/.\n\n**Inbound messages (webhook)**: this connector does NOT receive inbound messages. Meta delivers them via a webhook you must host yourself; AnythingMCP's current architecture is request/response only. If you need a chatbot that replies to user messages, host a webhook receiver separately and use this connector for the outbound side. Use `whatsapp_mark_message_as_read` to send read receipts for messages your webhook has processed.","region":"intl","category":"messaging","icon":"whatsapp","docsUrl":"https://developers.facebook.com/docs/whatsapp/cloud-api","requiredEnvVars":["WHATSAPP_ACCESS_TOKEN","WHATSAPP_BUSINESS_ACCOUNT_ID"],"toolCount":14,"authType":"BEARER_TOKEN"},{"slug":"woocommerce","name":"WooCommerce","description":"AI-native commerce operations for any WooCommerce store. Semantic tools for products, variations, inventory, orders, refunds, customers, categories, and reports — plus documented multi-step recipes (inventory optimisation, SEO refresh, upsell/cross-sell, abandoned-order triage, revenue analysis).","instructions":"This connector talks to the WooCommerce REST API v3 (`/wp-json/wc/v3`). Works against any WordPress + WooCommerce site. HTTPS required.\n\n## Setup\n\n1. **`WOOCOMMERCE_URL`** — site root (e.g. `https://shop.example.com`). Do NOT include `/wp-json`; the adapter appends `/wp-json/wc/v3`.\n2. **`WOOCOMMERCE_CONSUMER_KEY`** + **`WOOCOMMERCE_CONSUMER_SECRET`** — generate in WP admin → WooCommerce → Settings → Advanced → REST API → Add key. Use **Read/Write** for full functionality.\n\nHTTPS is mandatory: on HTTP, WC requires OAuth1 instead of Basic Auth (the connector only does Basic Auth).\n\n## Pagination\n\nList endpoints default to `per_page=10`, max `100`. Pass explicit `per_page` + iterate `page` for full catalog scans. Total counts are in `X-WP-Total` / `X-WP-TotalPages` headers (not returned in the JSON body).\n\n## Bulk writes\n\nFor ≥ 3 product updates use `woocommerce_batch_update_products` (one call, up to 100 entries). Don't fan out single `update_product` calls.\n\n## SEO meta (Yoast / Rank Math) on products\n\nMeta lives in the `meta_data` array on the product. Set it via `woocommerce_update_product`:\n\n```json\n\"meta_data\": [\n  { \"key\": \"_yoast_wpseo_metadesc\", \"value\": \"...\" },\n  { \"key\": \"_yoast_wpseo_focuskw\", \"value\": \"...\" }\n]\n```\n\nRank Math: `rank_math_description`, `rank_math_focus_keyword`, `rank_math_title`. Full reference: `wordpress_list_seo_meta_keys` (sibling WordPress connector).\n\n## Multi-step workflows\n\nFor inventory optimisation, product SEO, upsell/cross-sell, low-conversion analysis, abandoned-order triage, or KPI snapshots → call the dedicated **`woocommerce_skill_*`** tool. It returns the step-by-step playbook on demand. Don't preload that knowledge here.\n\n## Enum reference cards\n\nValid values for order status / product type / stock status / report period / payment methods → call **`woocommerce_list_*_options`**.\n\n## Permissions cheat-sheet\n\n- All list / get / reports: Read-only key.\n- Product create/update/delete, order update, refund, batch: Read/Write key.\n- Customer create / coupon create: Read/Write key.","region":"intl","category":"ecommerce","icon":"woocommerce","docsUrl":"https://woocommerce.github.io/woocommerce-rest-api-docs/","requiredEnvVars":["WOOCOMMERCE_URL","WOOCOMMERCE_CONSUMER_KEY","WOOCOMMERCE_CONSUMER_SECRET"],"toolCount":49,"authType":"BASIC_AUTH","priority":50},{"slug":"wordpress","name":"WordPress","description":"AI-native publishing and content operations for any self-hosted WordPress site. Semantic tools for posts, pages, taxonomies, media metadata, users, comments, SEO meta and site health — plus documented multi-step recipes (SEO content pipeline, scheduled publishing, content refresh, internal linking, media optimisation).","instructions":"This connector talks to the WordPress core REST API (`/wp-json/wp/v2`). WordPress 5.6+ (Application Passwords) and HTTPS required.\n\n## Setup\n\n1. **`WORDPRESS_URL`** — the site root (e.g. `https://example.com`). Do NOT include `/wp-json`; the adapter appends it. HTTPS mandatory.\n2. **`WORDPRESS_USERNAME`** — login name with the role needed (Editor for posts, Administrator for users / site-health).\n3. **`WORDPRESS_APP_PASSWORD`** — generate in `/wp-admin/profile.php` → Application Passwords. Forward verbatim (spaces or no-spaces both work).\n\n## Payload control\n\nWP responses are large by default. Every `list_*` and `get_*` accepts `_fields` (comma-separated allowlist, e.g. `id,title,status,modified,slug,link`). Use it.\n\n## SEO plugin meta keys (Yoast / Rank Math)\n\nMeta is REST-visible only if registered with `show_in_rest: true`. Yoast and Rank Math do this on modern versions. Call `wordpress_list_seo_meta_keys` for the full reference card.\n\n## Multi-step workflows\n\nFor recipes like SEO refresh, content refresh, scheduled publishing, internal linking, or media optimisation, call the dedicated **`wordpress_skill_*`** tool — it returns the step-by-step playbook on demand. Don't preload that knowledge here.\n\n## Enum reference cards\n\nFor valid values of status / role / comment-status / site-health test slugs, call the corresponding **`wordpress_list_*_options`** tool. The site-health slugs in particular use hyphens, not underscores — easy to get wrong.\n\n## Permissions cheat-sheet\n\nPosts CRUD: Editor. Users CRUD: Administrator. Site health / settings: Administrator. Comments moderate: Editor. `rest_cannot_*` errors mean the App Password user lacks the capability.","region":"intl","category":"cms","icon":"wordpress","docsUrl":"https://developer.wordpress.org/rest-api/","requiredEnvVars":["WORDPRESS_URL","WORDPRESS_USERNAME","WORDPRESS_APP_PASSWORD"],"toolCount":38,"authType":"BASIC_AUTH","priority":50},{"slug":"workable","name":"Workable","description":"Manage Workable ATS (candidates, jobs, members, stages, comments) from any AI agent. 9 tools, Bearer token auth.","instructions":"This connector wraps the Workable Hiring API (per-subdomain — yoursub.workable.com/spi/v3).\n\n**Setup**:\n1. Log into your Workable account → top-right avatar → **Integrations → Workable API → Generate access token**.\n2. Note your subdomain (the part before `.workable.com`).\n3. Set `WORKABLE_SUBDOMAIN` and `WORKABLE_ACCESS_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${WORKABLE_ACCESS_TOKEN}`.\n\n**Per-tenant baseUrl**: `https://${WORKABLE_SUBDOMAIN}.workable.com/spi/v3`. Substituted at import time.\n\n**Job 'shortcode'**: Workable identifies jobs by short hash strings (`AC123ABCDE`) in URLs/API. Use `workable_list_jobs` to discover.\n\n**Candidate disqualification**: writes use a stage `disqualified` and a `disqualification_reason_id`. Reasons are configured per-account.\n\n**Pagination**: cursor-based — response has `paging.next` (full URL). Pass back the URL's `since_id` or use the full cursor query.\n\n**Rate limits**: 300 req/min per account. 429 → exponential.\n\n**Out of scope here**: assessments, video interviews, requisitions, payroll fields (Workable HR Cloud is separate).","region":"intl","category":"hr","icon":"workable","docsUrl":"https://workable.readme.io/reference/","requiredEnvVars":["WORKABLE_SUBDOMAIN","WORKABLE_ACCESS_TOKEN"],"toolCount":9,"authType":"BEARER_TOKEN"},{"slug":"wrike","name":"Wrike","description":"Manage Wrike (work management: tasks, folders, projects, comments, timelogs, attachments) from any AI agent. 10 tools, Bearer token.","instructions":"This connector wraps the Wrike API v4 (per-host).\n\n**Setup**:\n1. Log into your Wrike account → top-right profile → **Apps & Integrations → API → Create new application**.\n2. Generate a permanent access token. Note your host — most accounts are `www.wrike.com`, but EU accounts use `app-eu.wrike.com`. Change baseUrl accordingly.\n3. Set `WRIKE_ACCESS_TOKEN`.\n\n**Authentication**: `Authorization: Bearer ${WRIKE_ACCESS_TOKEN}`.\n\n**Entity model**: `Account → Folder/Project → Task → Subtask`. A folder can contain folders + tasks. Projects are folders with `project: true` metadata.\n\n**ID format**: Wrike IDs are short opaque strings (`IEAAGYTSI4ABCDEF`). Always discover via list endpoints; don't construct.\n\n**Pagination**: cursor-based via `nextPageToken`. Pass back as `nextPageToken` query param.\n\n**Rate limits**: 100 req / 60s per token. 429 with `X-Rate-Limit-Remaining`.\n\n**Out of scope here**: blueprints, custom workflows CRUD, dashboard widgets, approvals, the Wrike Integrate (Workato wrap) extras.","region":"intl","category":"project-management","icon":"wrike","docsUrl":"https://developers.wrike.com/","requiredEnvVars":["WRIKE_ACCESS_TOKEN"],"toolCount":10,"authType":"BEARER_TOKEN"},{"slug":"wufoo","name":"Wufoo","description":"Read Wufoo (SurveyMonkey-owned classic form builder) submissions and form definitions from any AI agent. 6 tools, Basic auth, subdomain-templated URL.","instructions":"This connector uses the Wufoo API v3 (wufoo.com/api).\n\n**Setup**:\n1. Sign in to Wufoo → top-right avatar → **Account → API Information**.\n2. Note your **API key** and your **subdomain** (e.g. if URL is `acme.wufoo.com` → `acme`).\n3. Set:\n   - `WUFOO_SUBDOMAIN` = your subdomain\n   - `WUFOO_API_KEY` = the API key\n\n**Authentication**: HTTP Basic with username=API_KEY, password='footastic' (literal — Wufoo's convention).\n\n**Subdomain in base URL**: `https://{{WUFOO_SUBDOMAIN}}.wufoo.com/api/v3`.\n\n**Form/Entry model**: forms (the definitions) contain fields (the questions). Entries (submissions) are field_id→value mappings keyed by short_field_id strings like 'Field1', 'Field2'.\n\n**Pagination**: `?pageStart=N&pageSize=M` (max 100).\n\n**Sort/filter**: pass filters via query params `Filter1=Field1+Is_equal_to+ACME&match=AND` (Wufoo's quirky filter syntax).\n\n**Out of scope here**: form creation (UI-only), reports, users, webhooks (configured in UI).","region":"intl","category":"forms","icon":"wufoo","docsUrl":"https://wufoo.com/docs/api/v3/","requiredEnvVars":["WUFOO_SUBDOMAIN","WUFOO_API_KEY"],"toolCount":6,"authType":"BASIC_AUTH"},{"slug":"youtube-data","name":"YouTube Data API","description":"Read YouTube data — videos, channels, playlists, search, comments — and (with OAuth) manage your own uploads. 9 tools, API key + optional OAuth Bearer.","instructions":"This connector uses the YouTube Data API v3 (developers.google.com/youtube/v3).\n\n**Setup**:\n1. Create / pick a Google Cloud project at https://console.cloud.google.com.\n2. **APIs & Services → Library → enable YouTube Data API v3**.\n3. **Credentials → Create credentials → API key**. (For write operations, also do OAuth2 client + get a Bearer token with `youtube.upload`/`youtube` scopes — out of scope here.)\n4. Set `YOUTUBE_API_KEY` to the API key.\n\n**Authentication**: query-string `?key=...`. Read operations don't need OAuth.\n\n**Quota model**: every API call costs **units** against your daily quota (default 10,000/day for new projects — request more via Google's quota form). search.list costs 100 units per call (most expensive), videos.list ~1 unit. Watch quota in the Cloud Console.\n\n**part parameter**: most resources let you choose which 'parts' of the object to return — e.g. `?part=snippet,statistics,contentDetails`. Slimmer = cheaper.\n\n**Pagination**: `nextPageToken` cursor.\n\n**Out of scope here**: video uploads (multipart + OAuth + resumable upload), captions, comment moderation, live broadcasts, monetization, channel branding.","region":"intl","category":"social","icon":"youtube","docsUrl":"https://developers.google.com/youtube/v3/docs","requiredEnvVars":["YOUTUBE_API_KEY"],"toolCount":9,"authType":"QUERY_AUTH"},{"slug":"zendesk","name":"Zendesk Support","description":"Drive Zendesk Support (the help-desk product) from any AI agent: tickets, users, organizations, groups, macros, views, search. 18 tools covering the most common agent workflows. Basic-auth with email+API token.","instructions":"This connector uses the Zendesk Support REST API v2.\n\n**Setup**:\n1. Sign in to Zendesk as an admin → **Admin Center → Apps and integrations → APIs → Zendesk API → Settings → Token access ON**.\n2. **Add API token**, label it (e.g. 'AnythingMCP'), copy the generated token. It's shown ONCE.\n3. Set:\n   - `ZENDESK_SUBDOMAIN` = your account subdomain (e.g. `acme` if your URL is `acme.zendesk.com`)\n   - `ZENDESK_EMAIL` = the agent email of an admin user (the requests will be attributed to this user)\n   - `ZENDESK_API_TOKEN` = the token from step 2\n\n**Authentication**: HTTP Basic Auth with username `{email}/token` and password `{API_TOKEN}`. The adapter constructs this from the 3 env vars via the BASIC_AUTH profile. To use OAuth2 access tokens instead (for multi-user installs), the engine can also send `Authorization: Bearer ${oauth_token}` — but for single-tenant agent setups the API token model is simpler.\n\n**Base URL**: `https://{{ZENDESK_SUBDOMAIN}}.zendesk.com/api/v2`. The subdomain is part of the base URL — if you set the wrong one, every request 404s.\n\n**Tickets** are the central object. A ticket has subject, description, requester_id (the end user who reported), assignee_id (the agent), status (new/open/pending/hold/solved/closed), priority (low/normal/high/urgent), type (question/incident/problem/task), tags[], custom_fields.\n\n**Status transitions**: `closed` is terminal — once closed, a ticket can't be reopened (Zendesk forces a follow-up ticket). Use `solved` for 'done, awaiting closing-grace-period'. `pending` = awaiting requester response.\n\n**Update vs Comment**: to reply to a ticket from the agent side, you UPDATE the ticket with a `comment` object: `{public: true, body: '...'}`. public=false makes it an internal note (not visible to the requester). Use `zendesk_update_ticket` with `comment` for both.\n\n**Search**: Zendesk's Search API uses a Lucene-like query language. `type:ticket status:open assignee:none` returns unassigned open tickets. `type:user email:*@acme.com` returns all users at acme. Full syntax: https://support.zendesk.com/hc/en-us/articles/4408886879258. The adapter's `zendesk_search` returns up to 1000 results across all types.\n\n**Pagination**: cursor-based — list endpoints return `meta.has_more` + `meta.after_cursor`. Pass the cursor as `page[after]` on the next call. Page size 100 by default, max 1000 (or 100 for some endpoints).\n\n**Side-loading**: many list endpoints support `?include=users,organizations` to bundle related objects in one response — avoids N+1 lookups when displaying a ticket list with requester names.\n\n**Rate limits**: 700 req/min per agent on Suite Team, scales up with plan. On 429, honor the `Retry-After` header.\n\n**Out of scope here**: triggers, automations, dynamic content, Talk (voice), Chat, Sell (CRM), Sunshine (custom objects beyond standard).","region":"intl","category":"support","icon":"zendesk","docsUrl":"https://developer.zendesk.com/api-reference/ticketing/","requiredEnvVars":["ZENDESK_SUBDOMAIN","ZENDESK_EMAIL","ZENDESK_API_TOKEN"],"toolCount":18,"authType":"BASIC_AUTH"},{"slug":"zoho-crm","name":"Zoho CRM","description":"Manage Zoho CRM (leads, contacts, accounts, deals, tasks, notes, custom modules) from any AI agent. 10 tools, OAuth refresh-token auth.","instructions":"This connector wraps the Zoho CRM API v8 (www.zohoapis.com/crm/v8).\n\n**Setup — OAuth client + refresh token**:\n1. Go to https://api-console.zoho.com → **Add Client → Self Client**. Generate a 'grant token' with scope `ZohoCRM.modules.ALL,ZohoCRM.settings.READ,ZohoCRM.users.READ` and copy it.\n2. Exchange it for a refresh token via:\n   `curl -X POST 'https://accounts.zoho.com/oauth/v2/token?grant_type=authorization_code&client_id=CLIENT_ID&client_secret=CLIENT_SECRET&code=GRANT_TOKEN'`\n3. Save the `refresh_token` from the response. Set `ZOHO_CLIENT_ID`, `ZOHO_CLIENT_SECRET`, `ZOHO_REFRESH_TOKEN`.\n4. **Data centre matters**: Zoho hosts data in regional clusters: `.com` (US, default), `.eu` (EU), `.in` (India), `.com.au` (AU), `.jp` (Japan). If your org is on a non-US DC change baseUrl + token URL accordingly — wrong DC returns `INVALID_TOKEN`.\n\n**Authentication**: the engine handles the OAuth2 refresh flow — every call exchanges the refresh token for a short-lived (1h) access token and sends it as `Authorization: Zoho-oauthtoken ACCESS_TOKEN`. Zoho uses `Zoho-oauthtoken` instead of `Bearer` — non-standard but documented.\n\n**Module API**: every record type (Leads/Contacts/Accounts/Deals/Tasks/...) lives at `/crm/v8/{module}`. Custom modules use their API name (`Cf__Custom_Module1`). List of module API names is exposed via the modules metadata endpoint.\n\n**Bulk writes**: insert/update endpoints expect `{data: [{...}, {...}], trigger: ['approval','workflow','blueprint']}` shape — wrap a single record in an array.\n\n**Pagination**: `page` + `per_page` (max 200). Response has `info: {more_records: bool, page: N, per_page: N}`.\n\n**Rate limits**: 50 req/min per OAuth client + daily credits (5k on free, 25k on Standard, 250k on Enterprise). 429 → exponential backoff.\n\n**Out of scope here**: bulk import (CSV upload + polling), territory rules CRUD, workflow execution, Sandbox switching.","region":"intl","category":"crm","icon":"zoho-crm","docsUrl":"https://www.zoho.com/crm/developer/docs/api/v8/","requiredEnvVars":["ZOHO_CLIENT_ID","ZOHO_CLIENT_SECRET","ZOHO_REFRESH_TOKEN"],"toolCount":10,"authType":"OAUTH2"},{"slug":"mercado-libre","name":"Mercado Libre","description":"LATAM's largest e-commerce marketplace — search items, fetch product details, look up users, and list seller orders across Brasil (MLB), Argentina (MLA), Mexico (MLM), Chile (MLC), Colombia (MCO), Peru (MPE), Uruguay (MLU). OAuth2 access token required for every endpoint.","instructions":"This connector uses the Mercado Libre REST API.\n\n**All endpoints now require OAuth2.** Historically `/sites/{site_id}/search`, `/items/{item_id}` and `/users/{user_id}` were public, but as of 2025 Mercado Libre returns HTTP 403 on unauthenticated calls. You need a valid access token for every tool in this adapter.\n\n**Creating an app**: register at https://developers.mercadolibre.com/devcenter → 'Create app' → set a redirect URI (e.g. `https://your-anythingmcp-host/oauth/callback`). Copy `client_id` and `client_secret` into the env vars.\n\n**Authorization URL**: pick the country-specific URL based on the seller's marketplace:\n- Brasil: `https://auth.mercadolivre.com.br/authorization`\n- Argentina: `https://auth.mercadolibre.com.ar/authorization`\n- Mexico: `https://auth.mercadolibre.com.mx/authorization`\n- (and similar for .cl, .co, .pe, .com.uy)\n\nThis adapter defaults to Brasil — change it after import if your seller is on a different marketplace.\n\n**Site ids** (used by `search_items` and `get_item`):\n- MLB = Brasil, MLA = Argentina, MLM = Mexico, MLC = Chile, MCO = Colombia, MPE = Peru, MLU = Uruguay\n\n**Item ids**: format `{SITE}{NUMBER}` (e.g. `MLB1234567890`). Always include the site prefix.\n\n**Rate limits**: 60,000 calls/hour per app for read endpoints; lower for write endpoints. Returns 429 with `X-RateLimit-*` headers when exceeded.\n\n**Seller-specific endpoints** (`list_orders`) require the OAuth2 token to belong to the seller whose orders you're querying — you cannot view another seller's orders even with valid auth.","region":"br","category":"ecommerce","icon":"mercado-libre","docsUrl":"https://developers.mercadolibre.com/en_us/api-docs-en","requiredEnvVars":["MERCADO_LIBRE_CLIENT_ID","MERCADO_LIBRE_CLIENT_SECRET"],"toolCount":4,"authType":"OAUTH2"},{"slug":"razorpay","name":"Razorpay","description":"India's leading payment gateway. Create orders, fetch payments, manage refunds, and issue payment links. Supports UPI, cards, netbanking, wallets. Test mode keys (`rzp_test_*`) require no KYC — sign up and create in minutes.","instructions":"This connector uses the Razorpay v1 REST API.\n\n**Getting test API keys**: sign up at https://dashboard.razorpay.com → Settings → API Keys → Generate Test Key. You get a `key_id` (prefix `rzp_test_`) and a `key_secret`. Both are required.\n\n**Authentication**: HTTP Basic Auth with `key_id` as username and `key_secret` as password.\n\n**Amount convention**: Razorpay amounts are integers in the **smallest currency unit** — for INR this is **paise**, so ₹100 = `10000`. Same for other currencies (USD → cents, EUR → cents). Pass the value already multiplied; do NOT pass decimals.\n\n**Test mode**: completely free, no KYC required. Test cards: card number `4111 1111 1111 1111`, any future expiry, any CVV. UPI test handle: `success@razorpay`.\n\n**Production**: requires Razorpay KYC (business documents, bank account verification). Live keys start with `rzp_live_` — never commit them.","region":"in","category":"payments","icon":"razorpay","docsUrl":"https://razorpay.com/docs/api/","requiredEnvVars":["RAZORPAY_KEY_ID","RAZORPAY_KEY_SECRET"],"toolCount":4,"authType":"BASIC_AUTH"},{"slug":"line-messaging","name":"LINE Messaging API","description":"Send push, reply and broadcast messages from a LINE Official Account — LINE is the dominant chat platform in Japan, Taiwan and Thailand. Free tier of 500 push messages per month, unlimited reply messages, channel access tokens require no KYC.","instructions":"This connector uses the LINE Messaging API v2.\n\n**Creating a channel**: log in to https://developers.line.biz/console → create a Provider → 'Create a new channel' → 'Messaging API'. Set up the LINE Official Account (auto-created with the channel), then under the channel's 'Messaging API' tab, scroll to 'Channel access token' → 'Issue' a long-lived token. Paste it as `LINE_CHANNEL_ACCESS_TOKEN`.\n\n**Authentication**: Bearer Token (the channel access token). Note: this token belongs to the channel, not to a user — anyone with the token can post as that Official Account, so keep it secret.\n\n**Message shape**: LINE messages are objects with a `type` field. Simplest example: `{\"type\": \"text\", \"text\": \"Hello\"}`. Other types: `sticker`, `image`, `video`, `audio`, `location`, `template`, `flex`. The `messages` parameter on every tool is an **array of up to 5** message objects.\n\n**`to` userId**: cannot be looked up cold — you only get a userId from webhook events when a user interacts with the Official Account. Store the userId on first webhook contact, then use it for push.\n\n**`replyToken`**: returned in webhook events. Valid for **~30 seconds** after the original user message. Use `line_reply_message` (free, unlimited) instead of `line_push_message` (counts against the 500/month free quota) whenever possible.\n\n**Broadcast**: sends to ALL friends of the Official Account. Counts heavily against the push quota — use sparingly.\n\n**Pricing**: free tier = 500 push messages/month. Paid tiers from JP¥5,000/month for higher quotas.","region":"jp","category":"messaging","icon":"line","docsUrl":"https://developers.line.biz/en/reference/messaging-api/","requiredEnvVars":["LINE_CHANNEL_ACCESS_TOKEN"],"toolCount":4,"authType":"BEARER_TOKEN"},{"slug":"paystack","name":"Paystack","description":"Leading African payment processor (Nigeria-led, also supports Ghana, South Africa, Kenya, Côte d'Ivoire). Initialize transactions, verify payments, list customers, issue refunds. Test secret keys (`sk_test_*`) require no KYC and work in minutes.","instructions":"This connector uses the Paystack REST API v1.\n\n**Getting test API keys**: sign up at https://dashboard.paystack.com → Settings → API Keys & Webhooks. You get a `sk_test_*` (secret key — server-side, used here) and a `pk_test_*` (public key — for client-side checkout). This adapter only needs the **secret key**.\n\n**Authentication**: Bearer Token. Header: `Authorization: Bearer sk_test_xxxxx`.\n\n**Amount convention**: amounts are integers in the **smallest currency subunit** — for NGN this is **kobo**, so ₦100 = `10000`. Same for ZAR (cents), GHS (pesewas), KES (cents).\n\n**Supported currencies**: NGN (default), USD, GHS, ZAR, KES, XOF (CFA franc).\n\n**Test cards** (test mode only): card number `4084 0840 8408 4081`, CVV `408`, expiry any future date, PIN `0000`, OTP `123456`.\n\n**Webhooks**: real-money flows should verify payments via `paystack_verify_transaction` from a webhook handler, not by polling. The verify endpoint is idempotent and free.\n\n**Production**: requires Paystack KYC (business documents, settlement bank account). Live keys start with `sk_live_` — never commit them.","region":"ng","category":"payments","icon":"paystack","docsUrl":"https://paystack.com/docs/api/","requiredEnvVars":["PAYSTACK_SECRET_KEY"],"toolCount":4,"authType":"BEARER_TOKEN"}]