Dench Integrations
Use the Dench Integrations tools for all connected third-party app tasks in DenchClaw.
Two tools only
dench_search_integrations — Search for available integration tools by query and/or toolkit slug. Returns tool slugs, descriptions, full input_schema, connection status, and connected accounts.
dench_execute_integrations — Execute a tool by its tool_slug with arguments matching the input_schema. The gateway handles authentication and account selection automatically when only one account is connected.
Workflow
- Call
dench_search_integrations with a query with EXACT search strings of what might help you find relevant tools. like "posthog project", "stripe subscription", etc. (optionally narrow with toolkit).
- Inspect the returned
results — each has tool_slug, input_schema, is_connected, account_count, and accounts.
- Read the
input_schema to understand required fields, types, and defaults.
- Call
dench_execute_integrations with tool_slug and the correct arguments.
Do not use:
gog, shell CLIs for Gmail / Calendar / Drive / Slack / GitHub / Notion / Linear (unless you need to as last resort or if explicitly asked)
curl or raw gateway HTTP calls (unless explicitly asked)
- Direct provider REST calls (unless explicitly asked)
Multi-account handling
When dench_search_integrations shows account_count > 1 for a toolkit:
- The
accounts array lists each connected account with connected_account_id, label, and email.
- Ask the user which account they want to use.
- Pass the chosen
connected_account_id to dench_execute_integrations.
When only one account is connected, the gateway auto-selects it — no connected_account_id needed.
Execute examples
Gmail — fetch recent emails
{
"tool_slug": "GMAIL_FETCH_EMAILS",
"arguments": {
"label_ids": ["INBOX"],
"max_results": 10
}
}
Slack — send a message
{
"tool_slug": "SLACK_SEND_MESSAGE",
"arguments": {
"channel": "C01ABCDEF",
"text": "Hello from DenchClaw!"
}
}
GitHub — list pull requests
{
"tool_slug": "GITHUB_LIST_PULL_REQUESTS",
"arguments": {
"owner": "DenchHQ",
"repo": "denchclaw",
"state": "open"
}
}
Stripe — list subscriptions
{
"tool_slug": "STRIPE_LIST_SUBSCRIPTIONS",
"arguments": {
"limit": 100
}
}
YouTube — list subscriptions
{
"tool_slug": "YOUTUBE_LIST_USER_SUBSCRIPTIONS",
"arguments": {
"part": "snippet",
"max_results": 50
}
}
With explicit account selection
{
"tool_slug": "GMAIL_SEND_EMAIL",
"arguments": {
"to": "user@example.com",
"subject": "Hello",
"body": "Test email"
},
"connected_account_id": "abc123-def456"
}
General rules
- Tool names are uppercase with underscores (e.g.
GMAIL_FETCH_EMAILS).
- Pass JSON-shaped arguments as the tool schema requires: arrays are arrays, not comma-separated strings.
- Read the returned
input_schema before filling arguments. Use exact field names and types.
- Treat the live schema from
dench_search_integrations as authoritative over any recipe table below.
- If search returns zero gateway matches but the app is connected, results may include
match_source: "static_recipe_fallback" with suggested_arguments. Execute that tool immediately — do not stop the turn or switch to gog.
- If gateway search still fails, retry with toolkit only (omit query) or a shorter query before giving up.
- If a call fails on argument shape, fix the types and retry once before escalating.
- If the search returns
availability: "connect_required", show the connect link to the user.
- If the response includes pagination fields (
has_more, next_cursor, starting_after, etc.), keep paginating when the user asked for the full dataset.
Quick recipe tables
Gmail
| Intent |
Tool |
Key arguments |
| List recent mail |
GMAIL_FETCH_EMAILS |
label_ids: ["INBOX"], max_results: 10 |
| Read one message |
GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID |
message_id from list results |
| Send mail |
GMAIL_SEND_EMAIL |
to, subject, body |
Gotcha: label_ids must be an array like ["INBOX"], never a single string.
Slack
| Intent |
Tool |
Key arguments |
| Send a message |
SLACK_SEND_MESSAGE |
channel, text |
| List channels |
SLACK_LIST_CONVERSATIONS |
Use schema filters |
Gotcha: channel is usually a channel ID (starts with C), not the display name.
GitHub
| Intent |
Tool |
Key arguments |
| List repos |
GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER |
Pagination per schema |
| Find pull requests |
GITHUB_FIND_PULL_REQUESTS |
Best for broad PR search |
| List pull requests |
GITHUB_LIST_PULL_REQUESTS |
owner, repo |
| Create issue |
GITHUB_CREATE_AN_ISSUE |
owner, repo, title, body |
Notion
| Intent |
Tool |
Key arguments |
| Search |
NOTION_SEARCH |
Query string |
| Read page |
NOTION_GET_PAGE |
Page ID |
| Create page |
NOTION_CREATE_PAGE |
Parent object per schema |
Google Calendar
| Intent |
Tool |
Key arguments |
| List calendars |
GOOGLE_CALENDAR_CALENDAR_LIST |
Optional params |
| List events |
GOOGLE_CALENDAR_EVENTS_LIST |
calendar_id, time_min/time_max (RFC3339) |
| Create event |
GOOGLE_CALENDAR_CREATE_EVENT |
Calendar id + event payload |
Gotcha: Datetimes should be RFC3339 strings.
Linear
| Intent |
Tool |
Key arguments |
| List issues |
LINEAR_LIST_ISSUES |
Filters per schema |
| Create issue |
LINEAR_CREATE_ISSUE |
Team id, title, description |
Stripe
| Intent |
Tool |
Key arguments |
| List subscriptions |
STRIPE_LIST_SUBSCRIPTIONS |
Use schema filters |
| Search subscriptions |
STRIPE_SEARCH_SUBSCRIPTIONS |
Customer or filter-specific |
| List customers |
STRIPE_LIST_CUSTOMERS |
For customer lookup |
| Retrieve balance |
STRIPE_RETRIEVE_BALANCE |
Current balance snapshot |
Subagent handoff
When delegating, include: the tool_slug, the arguments object (copy shapes from the live input_schema returned by dench_search_integrations), and if applicable the connected_account_id.
1---2name: dench-integrations3description: Connected app integration recipes for Dench Integrations (Gmail, Slack, GitHub, Notion, Google Calendar, Linear, Stripe, YouTube, and 500+ more)4---56# Dench Integrations78Use the **Dench Integrations tools** for all connected third-party app tasks in DenchClaw.910## Two tools only11121. **`dench_search_integrations`** — Search for available integration tools by query and/or toolkit slug. Returns tool slugs, descriptions, full `input_schema`, connection status, and connected accounts.132. **`dench_execute_integrations`** — Execute a tool by its `tool_slug` with `arguments` matching the `input_schema`. The gateway handles authentication and account selection automatically when only one account is connected.1415## Workflow16171. Call `dench_search_integrations` with a query with EXACT search strings of what might help you find relevant tools. like "posthog project", "stripe subscription", etc. (optionally narrow with toolkit).182. Inspect the returned `results` — each has `tool_slug`, `input_schema`, `is_connected`, `account_count`, and `accounts`.193. Read the `input_schema` to understand required fields, types, and defaults.204. Call `dench_execute_integrations` with `tool_slug` and the correct `arguments`.2122Do **not** use:2324- `gog`, shell CLIs for Gmail / Calendar / Drive / Slack / GitHub / Notion / Linear (unless you need to as last resort or if explicitly asked)25- `curl` or raw gateway HTTP calls (unless explicitly asked)26- Direct provider REST calls (unless explicitly asked)2728## Multi-account handling2930When `dench_search_integrations` shows `account_count > 1` for a toolkit:31321. The `accounts` array lists each connected account with `connected_account_id`, `label`, and `email`.332. Ask the user which account they want to use.343. Pass the chosen `connected_account_id` to `dench_execute_integrations`.3536When only one account is connected, the gateway auto-selects it — no `connected_account_id` needed.3738## Execute examples3940### Gmail — fetch recent emails4142```json43{44 "tool_slug": "GMAIL_FETCH_EMAILS",45 "arguments": {46 "label_ids": ["INBOX"],47 "max_results": 1048 }49}50```5152### Slack — send a message5354```json55{56 "tool_slug": "SLACK_SEND_MESSAGE",57 "arguments": {58 "channel": "C01ABCDEF",59 "text": "Hello from DenchClaw!"60 }61}62```6364### GitHub — list pull requests6566```json67{68 "tool_slug": "GITHUB_LIST_PULL_REQUESTS",69 "arguments": {70 "owner": "DenchHQ",71 "repo": "denchclaw",72 "state": "open"73 }74}75```7677### Stripe — list subscriptions7879```json80{81 "tool_slug": "STRIPE_LIST_SUBSCRIPTIONS",82 "arguments": {83 "limit": 10084 }85}86```8788### YouTube — list subscriptions8990```json91{92 "tool_slug": "YOUTUBE_LIST_USER_SUBSCRIPTIONS",93 "arguments": {94 "part": "snippet",95 "max_results": 5096 }97}98```99100### With explicit account selection101102```json103{104 "tool_slug": "GMAIL_SEND_EMAIL",105 "arguments": {106 "to": "user@example.com",107 "subject": "Hello",108 "body": "Test email"109 },110 "connected_account_id": "abc123-def456"111}112```113114## General rules115116- Tool names are **uppercase** with underscores (e.g. `GMAIL_FETCH_EMAILS`).117- Pass **JSON-shaped** arguments as the tool schema requires: arrays are arrays, not comma-separated strings.118- Read the returned `input_schema` before filling arguments. Use exact field names and types.119- Treat the live schema from `dench_search_integrations` as authoritative over any recipe table below.120- If search returns **zero gateway matches** but the app is connected, results may include `match_source: "static_recipe_fallback"` with `suggested_arguments`. **Execute that tool immediately** — do not stop the turn or switch to `gog`.121- If gateway search still fails, retry with **toolkit only** (omit query) or a shorter query before giving up.122- If a call fails on argument shape, fix the types and retry once before escalating.123- If the search returns `availability: "connect_required"`, show the connect link to the user.124- If the response includes pagination fields (`has_more`, `next_cursor`, `starting_after`, etc.), keep paginating when the user asked for the full dataset.125126## Quick recipe tables127128### Gmail129130| Intent | Tool | Key arguments |131| ---------------- | ----------------------------------- | --------------------------------------------- |132| List recent mail | `GMAIL_FETCH_EMAILS` | `label_ids`: `["INBOX"]`, `max_results`: `10` |133| Read one message | `GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID` | `message_id` from list results |134| Send mail | `GMAIL_SEND_EMAIL` | `to`, `subject`, `body` |135136**Gotcha:** `label_ids` must be an array like `["INBOX"]`, never a single string.137138### Slack139140| Intent | Tool | Key arguments |141| -------------- | -------------------------- | ------------------ |142| Send a message | `SLACK_SEND_MESSAGE` | `channel`, `text` |143| List channels | `SLACK_LIST_CONVERSATIONS` | Use schema filters |144145**Gotcha:** `channel` is usually a channel ID (starts with `C`), not the display name.146147### GitHub148149| Intent | Tool | Key arguments |150| ------------------ | ----------------------------------------------------- | -------------------------------- |151| List repos | `GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER` | Pagination per schema |152| Find pull requests | `GITHUB_FIND_PULL_REQUESTS` | Best for broad PR search |153| List pull requests | `GITHUB_LIST_PULL_REQUESTS` | `owner`, `repo` |154| Create issue | `GITHUB_CREATE_AN_ISSUE` | `owner`, `repo`, `title`, `body` |155156### Notion157158| Intent | Tool | Key arguments |159| ----------- | -------------------- | ------------------------ |160| Search | `NOTION_SEARCH` | Query string |161| Read page | `NOTION_GET_PAGE` | Page ID |162| Create page | `NOTION_CREATE_PAGE` | Parent object per schema |163164### Google Calendar165166| Intent | Tool | Key arguments |167| -------------- | ------------------------------- | ---------------------------------------------- |168| List calendars | `GOOGLE_CALENDAR_CALENDAR_LIST` | Optional params |169| List events | `GOOGLE_CALENDAR_EVENTS_LIST` | `calendar_id`, `time_min`/`time_max` (RFC3339) |170| Create event | `GOOGLE_CALENDAR_CREATE_EVENT` | Calendar id + event payload |171172**Gotcha:** Datetimes should be RFC3339 strings.173174### Linear175176| Intent | Tool | Key arguments |177| ------------ | --------------------- | --------------------------- |178| List issues | `LINEAR_LIST_ISSUES` | Filters per schema |179| Create issue | `LINEAR_CREATE_ISSUE` | Team id, title, description |180181### Stripe182183| Intent | Tool | Key arguments |184| -------------------- | ----------------------------- | --------------------------- |185| List subscriptions | `STRIPE_LIST_SUBSCRIPTIONS` | Use schema filters |186| Search subscriptions | `STRIPE_SEARCH_SUBSCRIPTIONS` | Customer or filter-specific |187| List customers | `STRIPE_LIST_CUSTOMERS` | For customer lookup |188| Retrieve balance | `STRIPE_RETRIEVE_BALANCE` | Current balance snapshot |189190## Subagent handoff191192When delegating, include: the `tool_slug`, the `arguments` object (copy shapes from the live `input_schema` returned by `dench_search_integrations`), and if applicable the `connected_account_id`.