| name | dench-integrations |
| description | Connected app integration recipes for Dench Integrations (Gmail, Slack, GitHub, Notion, Google Calendar, Linear, Stripe, YouTube, and 500+ more) |
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.