Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 52 additions & 50 deletions public/llms.txt

Large diffs are not rendered by default.

42 changes: 21 additions & 21 deletions toolkit-docs-generator/data/toolkits/airtable.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"id": "Airtable",
"label": "Airtable",
"version": "1.0.0",
"version": "1.0.1",
"description": "Arcade tools designed for LLMs to interact with Airtable bases and records",
"metadata": {
"category": "productivity",
Expand All @@ -27,7 +27,7 @@
{
"name": "CreateRecords",
"qualifiedName": "Airtable.CreateRecords",
"fullyQualifiedName": "Airtable.CreateRecords@1.0.0",
"fullyQualifiedName": "Airtable.CreateRecords@1.0.1",
"description": "Create rows in an Airtable table, up to 10 per call.\n\nRepeating this call creates additional rows rather than replacing the first set.\n`count` and `requested_count` are equal on success, and `record_ids` names the rows.\nIf Airtable confirms fewer rows than requested, this call raises instead of reporting\nan incomplete success, because new rows do not have caller-known IDs to reconcile.",
"parameters": [
{
Expand Down Expand Up @@ -176,7 +176,7 @@
{
"name": "DeleteRecords",
"qualifiedName": "Airtable.DeleteRecords",
"fullyQualifiedName": "Airtable.DeleteRecords@1.0.0",
"fullyQualifiedName": "Airtable.DeleteRecords@1.0.1",
"description": "Delete rows from an Airtable table, up to 10 per call.\n\nDeleted rows are removed from the table and cannot be restored through the API.\n`record_ids` holds only the rows Airtable confirmed deleted. When `count` is lower than\n`requested_count`, `unconfirmed_record_ids` names the rest; re-read those before\ndeleting again.",
"parameters": [
{
Expand Down Expand Up @@ -267,7 +267,7 @@
{
"name": "GetBaseSchema",
"qualifiedName": "Airtable.GetBaseSchema",
"fullyQualifiedName": "Airtable.GetBaseSchema@1.0.0",
"fullyQualifiedName": "Airtable.GetBaseSchema@1.0.1",
"description": "Get the column names, column types and select options inside an Airtable base.\n\nRead this before writing records: writes key on column names, a select column\nrejects values outside the options reported here, and a linked-record column only\naccepts record IDs from the table it names.\n\n`views_included` is false whenever a table's views were not returned: include_views\nwas false, or they were left out to fit the response (then `truncated` is true). An\nempty views list with `views_included` true means the table has no saved views.\n\nNarrow with `table` when only one table matters. Airtable returns the whole base,\nso leaving it empty on a wide base costs the context the records themselves need.\n`truncated` says detail was left out to keep the response usable: descriptions and\nviews go first, then columns from the end of a table. Ask for one named table to give\nit the whole response; a table still too wide returns its leading columns in order,\nalways at least its first, whose select options may be cut from the end.",
"parameters": [
{
Expand All @@ -282,7 +282,7 @@
"name": "table",
"type": "string",
"required": false,
"description": "Describe only this table, by name or a table ID starting with 'tbl'. Leave empty to describe every table in the base.",
"description": "Describe only this table, by name or a table ID starting with 'tbl'. Defaults to an empty string, which describes every table in the base.",
"enum": null,
"inferrable": true
},
Expand Down Expand Up @@ -353,7 +353,7 @@
{
"name": "GetRecord",
"qualifiedName": "Airtable.GetRecord",
"fullyQualifiedName": "Airtable.GetRecord@1.0.0",
"fullyQualifiedName": "Airtable.GetRecord@1.0.1",
"description": "Get a single Airtable row by its record ID.\n\nReturns every column unless fields narrows it. Long cell values are clipped the same\nway they are in a listing, and `truncated` says when that happened. A record ID that\ndoes not exist, or was deleted, comes back as a refusal that does not distinguish\nthe two.",
"parameters": [
{
Expand Down Expand Up @@ -458,14 +458,14 @@
{
"name": "ListBases",
"qualifiedName": "Airtable.ListBases",
"fullyQualifiedName": "Airtable.ListBases@1.0.0",
"fullyQualifiedName": "Airtable.ListBases@1.0.1",
"description": "List the Airtable bases this authorization can reach, with permission levels.\n\nReturns bases in Airtable's default order.",
"parameters": [
{
"name": "cursor",
"type": "string",
"required": false,
"description": "Continuation token from a previous call's next_cursor. Leave empty to start from the first page.",
"description": "Continuation token from a previous call's next_cursor. Defaults to an empty string, which starts from the first page.",
"enum": null,
"inferrable": true
}
Expand Down Expand Up @@ -518,7 +518,7 @@
{
"name": "ListRecords",
"qualifiedName": "Airtable.ListRecords",
"fullyQualifiedName": "Airtable.ListRecords@1.0.0",
"fullyQualifiedName": "Airtable.ListRecords@1.0.1",
"description": "List rows from an Airtable table, optionally filtered, sorted and column-limited.\n\nUse this when the condition combines columns, or compares numbers or dates. To match\none column against plain text, use the record search tool instead.\n\nReturns records in the view's order, or Airtable's default order when no view is\ngiven, unless sort_field overrides it.",
"parameters": [
{
Expand All @@ -541,15 +541,15 @@
"name": "view",
"type": "string",
"required": false,
"description": "Only return records visible in this view, by view name or view ID. Leave empty to read the whole table.",
"description": "Only return records visible in this view, by view name or view ID. Defaults to an empty string, which reads the whole table.",
"enum": null,
"inferrable": true
},
{
"name": "filter_formula",
"type": "string",
"required": false,
"description": "An Airtable formula that must evaluate true for a record to be returned, in the form {Column Name} = \"value\". Any literal value inside the formula must have its double quotes and backslashes escaped by the caller; this parameter is sent as written. To match one column against plain text, use the record search tool instead, which escapes the term for you. Leave empty for no filter.",
"description": "An Airtable formula that must evaluate true for a record to be returned, in the form {Column Name} = \"value\". Any literal value inside the formula must have its double quotes and backslashes escaped by the caller; this parameter is sent as written. To match one column against plain text, use the record search tool instead, which escapes the term for you. Defaults to an empty string, which applies no filter.",
"enum": null,
"inferrable": true
},
Expand All @@ -566,7 +566,7 @@
"name": "sort_field",
"type": "string",
"required": false,
"description": "Column name to sort by. Leave empty to use the table or view's own order.",
"description": "Column name to sort by. Defaults to an empty string, which keeps the table or view's own order.",
"enum": null,
"inferrable": true
},
Expand All @@ -593,7 +593,7 @@
"name": "cursor",
"type": "string",
"required": false,
"description": "Continuation token from a previous call's next_cursor. Leave empty to start from the first page.",
"description": "Continuation token from a previous call's next_cursor. Defaults to an empty string, which starts from the first page.",
"enum": null,
"inferrable": true
}
Expand Down Expand Up @@ -691,7 +691,7 @@
{
"name": "SearchRecords",
"qualifiedName": "Airtable.SearchRecords",
"fullyQualifiedName": "Airtable.SearchRecords@1.0.0",
"fullyQualifiedName": "Airtable.SearchRecords@1.0.1",
"description": "Find rows in an Airtable table whose column matches a search term.\n\nUse this to match one column against text: quotes and backslashes in the search term\nare escaped, so arbitrary text is safe to pass. Use the formula-based listing instead\nwhen the condition combines columns or compares numbers or dates.\n\nReturns records in the table's order unless sort_field is given.",
"parameters": [
{
Expand Down Expand Up @@ -738,7 +738,7 @@
"name": "view",
"type": "string",
"required": false,
"description": "Only search records visible in this view, by view name or view ID. Leave empty to search the whole table.",
"description": "Only search records visible in this view, by view name or view ID. Defaults to an empty string, which searches the whole table.",
"enum": null,
"inferrable": true
},
Expand All @@ -755,7 +755,7 @@
"name": "sort_field",
"type": "string",
"required": false,
"description": "Column name to sort matches by. Leave empty to use the table's own order.",
"description": "Column name to sort matches by. Defaults to an empty string, which keeps the table's own order.",
"enum": null,
"inferrable": true
},
Expand All @@ -782,7 +782,7 @@
"name": "cursor",
"type": "string",
"required": false,
"description": "Continuation token from a previous call's next_cursor. Leave empty to start from the first page.",
"description": "Continuation token from a previous call's next_cursor. Defaults to an empty string, which starts from the first page.",
"enum": null,
"inferrable": true
}
Expand Down Expand Up @@ -890,7 +890,7 @@
{
"name": "UpdateRecords",
"qualifiedName": "Airtable.UpdateRecords",
"fullyQualifiedName": "Airtable.UpdateRecords@1.0.0",
"fullyQualifiedName": "Airtable.UpdateRecords@1.0.1",
"description": "Change columns on existing Airtable rows, up to 10 per call.\n\nOnly the columns supplied are written; every other column is left untouched.\n`count` is how many rows Airtable confirmed. When it is lower than `requested_count`,\n`unconfirmed_record_ids` names the rest; re-read those before updating them again.",
"parameters": [
{
Expand Down Expand Up @@ -1020,7 +1020,7 @@
{
"name": "WhoAmI",
"qualifiedName": "Airtable.WhoAmI",
"fullyQualifiedName": "Airtable.WhoAmI@1.0.0",
"fullyQualifiedName": "Airtable.WhoAmI@1.0.1",
"description": "Get the Airtable account this authorization belongs to, and its granted scopes.\n\nUseful for confirming whose bases are being read or changed.",
"parameters": [],
"auth": {
Expand Down Expand Up @@ -1067,6 +1067,6 @@
"customImports": [],
"subPages": [],
"curationSourceHash": "da70ed30d9201488046d1ae1b04dc45cf6378210501e24b53236a4aa02f1ef89",
"generatedAt": "2026-09-26T11:13:07.164Z",
"summary": "Arcade's Airtable toolkit lets LLMs read and write Airtable bases and records through the Airtable REST API.\n\n## Capabilities\n\n- **Discovery** — List accessible bases with permission levels; retrieve a base's full schema (tables, column names, types, select options, linked-record targets, and saved views) before writing to avoid type or value mismatches.\n- **Record retrieval** — Fetch a single record by ID or list records with optional filtering, sorting, column limiting, and view scoping; use the dedicated search tool for single-column text matching and the formula-based list tool for multi-column or numeric/date conditions.\n- **Record writes** — Create up to 10 rows per call (repeating appends, never replaces); update specific columns on existing rows without touching others (up to 10 per call); delete rows permanently with partial-confirmation handling via `unconfirmed_record_ids`.\n- **Auth introspection** — Confirm which Airtable account the current authorization belongs to and which scopes have been granted.\n\n## OAuth\n\nThis toolkit uses OAuth 2.0 via the **Airtable** provider. See the [Arcade Airtable auth provider docs](https://docs.arcade.dev/en/references/auth-providers/airtable) for setup details."
"generatedAt": "2026-10-04T12:52:33.292Z",
"summary": "Arcade's Airtable toolkit lets LLMs read and write Airtable bases and records via the Airtable REST API. It covers the full CRUD lifecycle — discovering structure, querying rows, and modifying data — within a single OAuth-authenticated integration.\n\n## Capabilities\n\n- **Base and schema discovery:** List accessible bases with permission levels; fetch full column names, types, and select/linked-record options before writing to avoid rejected values.\n- **Record retrieval:** Get a single row by ID, list rows with filtering, sorting, view, and column scoping, or search rows by a single column text match — each tool optimized for different query shapes.\n- **Record creation and deletion:** Batch-create up to 10 rows per call (repeated calls append, never replace); batch-delete up to 10 rows per call with partial-success tracking via `unconfirmed_record_ids`.\n- **Record updates:** Patch existing rows (up to 10 per call) with column-level granularity — only supplied fields are written; unconfirmed IDs are surfaced for retry.\n- **Account inspection:** Resolve the authenticated Airtable identity and its granted scopes to confirm access context before reading or mutating data.\n\n## OAuth\n\nThis toolkit authenticates via **OAuth 2.0** with Airtable as the provider. See the [Arcade Airtable auth provider docs](https://docs.arcade.dev/en/references/auth-providers/airtable) for setup details."
}
14 changes: 7 additions & 7 deletions toolkit-docs-generator/data/toolkits/apollo.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"id": "Apollo",
"label": "Apollo",
"version": "1.0.0",
"version": "1.0.1",
"description": "Arcade tools designed for LLMs to interact with Apollo.io sales intelligence",
"metadata": {
"category": "sales",
Expand All @@ -18,7 +18,7 @@
{
"name": "EnrichOrganization",
"qualifiedName": "Apollo.EnrichOrganization",
"fullyQualifiedName": "Apollo.EnrichOrganization@1.0.0",
"fullyQualifiedName": "Apollo.EnrichOrganization@1.0.1",
"description": "Turn a company domain into firmographics (industry, size, revenue, funding,\nlocation) so a rep can qualify and size an account. Consumes one enrichment\ncredit on a match; when the plan is out of credits the result reports\nstatus=insufficient_credits rather than failing.",
"parameters": [
{
Expand Down Expand Up @@ -78,7 +78,7 @@
{
"name": "EnrichPerson",
"qualifiedName": "Apollo.EnrichPerson",
"fullyQualifiedName": "Apollo.EnrichPerson@1.0.0",
"fullyQualifiedName": "Apollo.EnrichPerson@1.0.1",
"description": "Turn a known person into a verified profile with their current role and,\non request, contact details. Provide at least one identifier: an Apollo person\nID, a name (or first and last name), an email, or a LinkedIn URL; an employer\nname or domain alone is not enough to identify someone. Consumes one enrichment\ncredit on a match; when the plan is out of credits the result reports\nstatus=insufficient_credits rather than failing.",
"parameters": [
{
Expand Down Expand Up @@ -242,7 +242,7 @@
{
"name": "GetApiUsage",
"qualifiedName": "Apollo.GetApiUsage",
"fullyQualifiedName": "Apollo.GetApiUsage@1.0.0",
"fullyQualifiedName": "Apollo.GetApiUsage@1.0.1",
"description": "Report per-endpoint rate limits and how many requests remain, so the agent\ncan pace a batch of lookups and avoid being throttled. Requires an Apollo\nmaster API key.",
"parameters": [],
"auth": null,
Expand Down Expand Up @@ -287,7 +287,7 @@
{
"name": "SearchOrganizations",
"qualifiedName": "Apollo.SearchOrganizations",
"fullyQualifiedName": "Apollo.SearchOrganizations@1.0.0",
"fullyQualifiedName": "Apollo.SearchOrganizations@1.0.1",
"description": "Find companies in Apollo's database that match a firmographic profile so a\nrep can prioritize the accounts worth working. Results include firmographics\ninline unless include_firmographics is disabled. Company search consumes plan\ncredits; when the plan is out of credits the result reports\nstatus=insufficient_credits with an empty list rather than failing.",
"parameters": [
{
Expand Down Expand Up @@ -470,7 +470,7 @@
{
"name": "SearchPeople",
"qualifiedName": "Apollo.SearchPeople",
"fullyQualifiedName": "Apollo.SearchPeople@1.0.0",
"fullyQualifiedName": "Apollo.SearchPeople@1.0.1",
"description": "Find people in Apollo's database by role and the firmographics of their\nemployer. Returns lightweight records without email or phone; use person\nenrichment to reveal verified contact details.",
"parameters": [
{
Expand Down Expand Up @@ -688,6 +688,6 @@
"customImports": [],
"subPages": [],
"curationSourceHash": "da70ed30d9201488046d1ae1b04dc45cf6378210501e24b53236a4aa02f1ef89",
"generatedAt": "2026-09-24T21:01:55.078Z",
"generatedAt": "2026-10-04T12:52:33.292Z",
"summary": "# Apollo Toolkit\n\nThe Apollo toolkit lets LLMs interact with [Apollo.io](https://www.apollo.io/) sales intelligence, enabling account research, lead discovery, and contact enrichment workflows via the Apollo API.\n\n## Capabilities\n\n- **Company intelligence**: Search Apollo's database by firmographic filters and enrich a company domain into detailed account data (industry, size, revenue, funding, location).\n- **People discovery & enrichment**: Search for people by role and employer profile, then enrich individual records with verified contact details using any available identifier (Apollo ID, name, email, or LinkedIn URL).\n- **Credit-aware results**: Enrichment and search operations report `status=insufficient_credits` with graceful degradation rather than hard failures when plan credits are exhausted.\n- **Rate-limit introspection**: Retrieve per-endpoint rate limits and remaining request counts to let agents pace batch workloads and avoid throttling.\n\n## Secrets\n\n`APOLLO_API_KEY` — A master API key issued by Apollo.io, required for all toolkit calls. The `Apollo.GetApiUsage` tool specifically requires the **master** API key (not a scoped or restricted key). Obtain it from the [Apollo.io API Keys settings page](https://app.apollo.io/#/settings/integrations/api) (Settings → Integrations → API Keys → Create new key). Ensure the key has the permissions your plan supports; enrichment and search calls consume plan credits tied to the key's account.\n\nSee the [Arcade secrets guide](https://docs.arcade.dev/en/guides/create-tools/tool-basics/create-tool-secrets) for how to configure secrets in Arcade, or manage them directly at [https://api.arcade.dev/dashboard/auth/secrets](https://api.arcade.dev/dashboard/auth/secrets)."
}
Loading