<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sapnesh Naik</title>
    <description>The latest articles on DEV Community by Sapnesh Naik (@sapnesh_naik_ngo).</description>
    <link>https://dev.to/sapnesh_naik_ngo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3884423%2Fc3bfbfef-0232-466f-a751-248f0e01963d.jpg</url>
      <title>DEV Community: Sapnesh Naik</title>
      <link>https://dev.to/sapnesh_naik_ngo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sapnesh_naik_ngo"/>
    <language>en</language>
    <item>
      <title>5 best tools to trigger AI agents from incoming emails in 2026</title>
      <dc:creator>Sapnesh Naik</dc:creator>
      <pubDate>Mon, 03 Aug 2026 22:32:54 +0000</pubDate>
      <link>https://dev.to/nangohq/5-best-tools-to-trigger-ai-agents-from-incoming-emails-in-2026-3fil</link>
      <guid>https://dev.to/nangohq/5-best-tools-to-trigger-ai-agents-from-incoming-emails-in-2026-3fil</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;At many companies, a new task starts as an email from a customer or coworker. An email-based trigger lets an AI agent derive context from the message and start performing a task.&lt;/p&gt;

&lt;p&gt;A production email trigger must deliver events reliably across providers, authenticate each mailbox, route events to the correct user, recover missed notifications, and give the agent scoped access to the APIs it needs after reading the message.&lt;/p&gt;

&lt;p&gt;We compared five such tools for developers building customer-facing agents. The main differences are mailbox coverage, trigger latency, customizability, coding-agent support, and whether the same platform lets the triggered agent act in other APIs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nango:&lt;/strong&gt; Best overall for customer-facing agents that start from email and act across other APIs. It supports webhooks for Gmail, Microsoft, iCloud, and IMAP integrations. It also provides 6,000+ pre-built tool calls across 900+ APIs, including CRM, ERP, banking, and e-commerce.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nylas:&lt;/strong&gt; Best for one unified email API. Its webhook hides provider differences, but its catalog is limited to communications APIs. Actions in a CRM, help desk, or accounting system need another integration product.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pipedream Connect:&lt;/strong&gt; Best for internal automations built in a low-code visual workflow editor, with the option to add snippets of code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AgentMail:&lt;/strong&gt; Best when the agent needs its own programmable inbox. It cannot connect an existing Gmail or Outlook mailbox, and actions in other APIs need another platform.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Composio:&lt;/strong&gt; Best for personal agents and internal automations that use pre-built Gmail or Outlook triggers. Gmail polling can take about 15 minutes.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Existing mailbox coverage&lt;/th&gt;
&lt;th&gt;New-email delivery&lt;/th&gt;
&lt;th&gt;Actions after the email&lt;/th&gt;
&lt;th&gt;Coding-agent build support&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Nango&lt;/td&gt;
&lt;td&gt;Gmail, Microsoft 365, Outlook, Exchange, Yahoo, iCloud, Fastmail, Zoho, and IMAP&lt;/td&gt;
&lt;td&gt;Webhooks or custom polling sync&lt;/td&gt;
&lt;td&gt;6000+ tools across 900+ APIs&lt;/td&gt;
&lt;td&gt;Dedicated skill to build, test, and deploy&lt;/td&gt;
&lt;td&gt;Customer-facing agents with custom workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nylas&lt;/td&gt;
&lt;td&gt;Gmail, Microsoft 365, Outlook, Exchange, Yahoo, iCloud, and IMAP&lt;/td&gt;
&lt;td&gt;Normalized webhook&lt;/td&gt;
&lt;td&gt;Email, calendar, and contacts; other APIs require another platform&lt;/td&gt;
&lt;td&gt;No dedicated integration builder skill&lt;/td&gt;
&lt;td&gt;Unified email API across providers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pipedream Connect&lt;/td&gt;
&lt;td&gt;Gmail and Outlook&lt;/td&gt;
&lt;td&gt;Provider trigger or configurable polling&lt;/td&gt;
&lt;td&gt;Workflow components&lt;/td&gt;
&lt;td&gt;No dedicated integration builder skill&lt;/td&gt;
&lt;td&gt;Low-code internal workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AgentMail&lt;/td&gt;
&lt;td&gt;AgentMail-hosted inboxes only&lt;/td&gt;
&lt;td&gt;Webhook or WebSocket&lt;/td&gt;
&lt;td&gt;Email only; other APIs require another platform&lt;/td&gt;
&lt;td&gt;No dedicated integration builder skill&lt;/td&gt;
&lt;td&gt;A dedicated email identity for an agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Composio&lt;/td&gt;
&lt;td&gt;Gmail and Outlook triggers&lt;/td&gt;
&lt;td&gt;Outlook real time, Gmail polling&lt;/td&gt;
&lt;td&gt;500+ toolkits&lt;/td&gt;
&lt;td&gt;No dedicated hosted custom-trigger builder&lt;/td&gt;
&lt;td&gt;Personal agents and internal automations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Why trigger an AI agent from email?
&lt;/h2&gt;

&lt;p&gt;Email remains the front door for a lot of operational work. Customers send support requests, prospects reply to sales threads, vendors submit invoices, and candidates attach resumes. An agent can start that work when the message arrives, rather than waiting for someone to copy it into another system.&lt;/p&gt;

&lt;p&gt;Common implementations include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Customer support:&lt;/strong&gt; classify the request, fetch account context from a CRM, update the help desk, and draft a reply for approval.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sales operations:&lt;/strong&gt; enrich an inbound lead, create or update the CRM record, assign an owner, and notify the right Slack channel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accounts payable:&lt;/strong&gt; extract an invoice, validate it against the vendor record, create a draft bill, and route exceptions to a human.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recruiting:&lt;/strong&gt; parse a resume, check for an existing candidate, update the ATS, and schedule the next step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent identities:&lt;/strong&gt; give a browser or research agent its own address so it can receive sign-in codes, files, and replies without access to a human mailbox.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many AI agent systems use email as the trigger, then call other APIs to retrieve data and perform tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges of supporting multiple email providers
&lt;/h2&gt;

&lt;p&gt;Customer-facing agents often need to support multiple email providers, each with a different event model. A platform that supports only one trigger mechanism leaves gaps when customers connect another kind of mailbox.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gmail and Google Workspace
&lt;/h3&gt;

&lt;p&gt;First, create a Google Cloud Pub/Sub topic and call the &lt;code&gt;watch&lt;/code&gt; API for each mailbox. Notifications identify the mailbox and its latest &lt;code&gt;historyId&lt;/code&gt;, but do not include the changed message. Call &lt;code&gt;history.list&lt;/code&gt; to find the change, then fetch the message (&lt;a href="https://developers.google.com/workspace/gmail/api/guides/push" rel="noopener noreferrer"&gt;Gmail push notification docs&lt;/a&gt;).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Google requires each Gmail &lt;code&gt;watch&lt;/code&gt; to be renewed at least every seven days and recommends daily renewal.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Microsoft 365, Outlook, and Exchange
&lt;/h3&gt;

&lt;p&gt;You subscribe to &lt;code&gt;created&lt;/code&gt;, &lt;code&gt;updated&lt;/code&gt;, or &lt;code&gt;deleted&lt;/code&gt; changes on a message resource and receive them at a webhook URL. Message subscriptions expire in under seven days, and Microsoft limits applications to 1,000 active Outlook subscriptions per mailbox (&lt;a href="https://learn.microsoft.com/en-us/graph/api/resources/subscription?view=graph-rest-1.0" rel="noopener noreferrer"&gt;Microsoft Graph subscription reference&lt;/a&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  IMAP: iCloud, Yahoo Mail, Fastmail, and private mail servers
&lt;/h3&gt;

&lt;p&gt;Apple has IMAP for reading iCloud Mail, not a public email webhook API (&lt;a href="https://support.apple.com/en-ca/102525" rel="noopener noreferrer"&gt;Apple’s iCloud Mail server settings&lt;/a&gt;). An IMAP server may support the &lt;code&gt;IDLE&lt;/code&gt; extension for change notifications. Otherwise, the integration must poll for messages after the last stored UID (&lt;a href="https://www.rfc-editor.org/rfc/rfc2177" rel="noopener noreferrer"&gt;RFC 2177&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The platform should handle these event models without requiring separate authentication, subscription renewal, routing, and retry systems for every provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to look for in an email trigger platform
&lt;/h2&gt;

&lt;p&gt;We used seven criteria for this comparison.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Mailbox coverage:&lt;/strong&gt; Can customers connect Gmail, Outlook, Microsoft 365, Exchange, iCloud, Yahoo, Fastmail, and generic IMAP accounts? Does the tool also support inboxes owned by agents?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webhook and polling support:&lt;/strong&gt; Can the platform use the provider’s native event system when available and run an incremental poll when it is not?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-user authentication:&lt;/strong&gt; Can each customer connect an account through your product, with tokens stored and refreshed outside the agent?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connection routing:&lt;/strong&gt; Does every event identify the right tenant and mailbox without a custom lookup system for each provider?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool access after the trigger:&lt;/strong&gt; Can the agent update a CRM, create a ticket, send a Slack message, or call another API with the same user’s credentials?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customization and ownership:&lt;/strong&gt; Can you change filters, sync state, message parsing, and tool logic in code? Can a coding agent help build and test it?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production controls:&lt;/strong&gt; Signed delivery, retries, deduplication, logs, tenant isolation, and a polling safety net all matter once the agent can write to customer systems.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The 5 best tools for AI agent email triggers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Nango
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://nango.dev" rel="noopener noreferrer"&gt;Nango&lt;/a&gt; lets you connect your AI agent to &lt;a href="https://nango.dev/api-integrations" rel="noopener noreferrer"&gt;900+ APIs&lt;/a&gt;. It ships with 6,000+ pre-built tools, customizable with coding agents, on infrastructure built for scale.&lt;/p&gt;

&lt;p&gt;For email-driven agents, Nango supports Gmail, Microsoft 365, Outlook, Exchange, and more through their provider APIs. Nango receives provider webhooks, runs scheduled syncs, and exposes approved actions through an API or MCP.&lt;/p&gt;

&lt;p&gt;The triggered agent can then act in CRM, help desk, calendar, messaging, accounting, and other APIs without receiving raw credentials.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F716kvz2wkd48k5q2wvkd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F716kvz2wkd48k5q2wvkd.png" alt="Nango dashboard showing Gmail, Outlook, Yahoo, Zoho Mail, and other integrations" width="799" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Product teams building customer-facing agents that need custom email triggers for multiple email providers and tool calls beyond the mailbox.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How the email trigger works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enable the integrations for the email providers you need, using Nango’s pre-provisioned OAuth apps or your own client IDs and secrets. Next, enable the pre-built tool calls or syncs the agent needs for each integration.&lt;/p&gt;

&lt;p&gt;For customization, use the &lt;a href="https://nango.dev/docs/getting-started/coding-agent-setup" rel="noopener noreferrer"&gt;Nango function builder skill&lt;/a&gt; with Claude Code, Cursor, Codex, or another coding agent to describe the mailbox trigger. When a new email is detected, Nango identifies the matching user connection and sends a webhook event to your application. Your handler can then queue the AI agent with the correct customer and message context.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9tndibwp3t50i626f3c8.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9tndibwp3t50i626f3c8.gif" alt="A coding agent building and testing a Gmail message sync" width="799" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Broad API coverage after the trigger:&lt;/strong&gt; along with Gmail, Microsoft mail APIs, and IMAP-compatible providers, Nango provides auth and tools for the CRM, help desk, Slack, accounting, calendar, and storage APIs that the agent will act on next.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast triggers with a recovery path:&lt;/strong&gt; use provider webhooks for low latency and a scheduled incremental sync to recover notifications that never arrived.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full email API access:&lt;/strong&gt; the agent can use provider-specific fields, Gmail labels, Outlook categories, custom headers, and endpoints via Nango’s proxy, rather than being limited to a fixed email schema.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;6,000+ pre-built tools:&lt;/strong&gt; start with &lt;a href="https://github.com/NangoHQ/integration-templates/tree/main/integrations/google-mail/actions" rel="noopener noreferrer"&gt;Gmail template actions&lt;/a&gt; for listing messages, managing labels, creating drafts, and sending replies. A coding agent with the &lt;a href="https://nango.dev/docs/getting-started/coding-agent-setup" rel="noopener noreferrer"&gt;Nango builder skill&lt;/a&gt; can customize or replace any function.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgc02xknd91agqnep2vz4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgc02xknd91agqnep2vz4.png" alt="Pre-built Gmail tools in the Nango dashboard" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Production runtime:&lt;/strong&gt; retries, per-connection logs, OpenTelemetry export, and customer-level routing are built into the platform.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple deployment options:&lt;/strong&gt; use Nango Cloud, deploy a fully managed instance in your own cloud account and region through BYOC, or &lt;a href="https://nango.dev/blog/best-self-hosted-api-integration-platforms-for-ai-agents/" rel="noopener noreferrer"&gt;self-host the open-source runtime&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No visual workflow canvas:&lt;/strong&gt; Nango is a better fit for engineers and coding agents than non-technical operations teams building one-off automations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Nylas
&lt;/h3&gt;

&lt;p&gt;Nylas provides a normalized email, calendar, and contacts API. Its Email API supports the major hosted providers and generic IMAP mailboxes.&lt;/p&gt;

&lt;p&gt;Nylas exposes a &lt;code&gt;message.created&lt;/code&gt; webhook for new mail. One webhook subscription covers connected accounts, and the payload includes the grant and message IDs needed to fetch the full message. Nylas also offers &lt;code&gt;message.created.cleaned&lt;/code&gt;, which can deliver a cleaned Markdown body for agent processing, and Agent Accounts for inboxes owned by agents.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg116tjcsrab9j5blaa23.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg116tjcsrab9j5blaa23.png" alt="Nylas connectors for Google, Microsoft, iCloud, IMAP, and Yahoo mailboxes" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams that want one hosted email API across multiple providers and expect agent workflows to stay within communications APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wide mailbox coverage:&lt;/strong&gt; Gmail, Outlook, Exchange, Yahoo, iCloud, and IMAP use the same message schema.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple new-email subscription:&lt;/strong&gt; &lt;code&gt;message.created&lt;/code&gt; hides Gmail Pub/Sub and Microsoft Graph subscription differences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent-friendly payloads:&lt;/strong&gt; cleaned-message webhooks can remove quoted replies and return Markdown instead of raw HTML.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Narrow API scope:&lt;/strong&gt; the catalog covers email, calendar, and contacts. An agent that needs to act in CRM, ticketing, accounting, or messaging systems requires a separate integration platform.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Normalized schema:&lt;/strong&gt; the abstraction is convenient until the agent needs a provider-specific Gmail or Microsoft Graph field or endpoint that Nylas does not expose.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Less control over the event implementation:&lt;/strong&gt; Nylas owns the provider sync and webhook abstraction. You consume its model rather than changing the underlying trigger code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No coding-agent build skill:&lt;/strong&gt; Nylas does not provide a dedicated skill for Claude Code, Cursor, or Codex to build, test against a real connection, and deploy custom integration logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F18trb0apn9axyr5egozy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F18trb0apn9axyr5egozy.png" alt="Nylas notification settings for customizing email webhook payloads" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Pipedream Connect
&lt;/h3&gt;

&lt;p&gt;Pipedream Connect exposes pre-built triggers through an SDK and a low-code visual workflow builder. A developer can deploy a Gmail or Outlook trigger for a specific external user and then route each event to a Pipedream workflow or an application webhook.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Internal email automations built in a low-code visual editor, with the option to add snippets of code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Large component catalog:&lt;/strong&gt; more than 10,000 pre-built actions and triggers are available to a workflow or agent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configurable polling:&lt;/strong&gt; polling sources accept an interval in seconds. Pipedream’s documentation shows a 60-second configuration as an example.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code snippets when needed:&lt;/strong&gt; add Node.js, Python, Go, or Bash steps inside a visual workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqyqqdq348cjd3tkssaul.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqyqqdq348cjd3tkssaul.png" alt="A multi-step integration in the Pipedream workflow builder" width="799" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Workflow-first development:&lt;/strong&gt; important logic and configuration live in the Pipedream project rather than as code in your application repo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production constraints:&lt;/strong&gt; running workflows for end users in production requires a higher-tier plan, and end-user workflows have account-selection limitations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No coding-agent integration skill:&lt;/strong&gt; Pipedream does not provide a dedicated skill that guides a coding agent through researching, testing, and deploying custom provider integrations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uncertain roadmap after the Workday acquisition:&lt;/strong&gt; &lt;a href="https://newsroom.workday.com/2025-11-19-Workday-Signs-Definitive-Agreement-to-Acquire-Pipedream" rel="noopener noreferrer"&gt;Workday announced its acquisition of Pipedream&lt;/a&gt; in November 2025. Pipedream’s public changelog lists no release after October 2025, so teams should verify the Connect roadmap before adopting it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. AgentMail
&lt;/h3&gt;

&lt;p&gt;AgentMail is an email provider for agents. You create an inbox through its API, receive &lt;code&gt;message.received&lt;/code&gt; events through a webhook or WebSocket, and use the same API or MCP server to read threads and reply.&lt;/p&gt;

&lt;p&gt;AgentMail does not connect to a customer’s Gmail or Outlook account. The agent receives a new address on AgentMail’s infrastructure, or on a custom domain you configure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F725900sj2rtkli3rryj2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F725900sj2rtkli3rryj2.png" alt="AgentMail onboarding screen for creating an agent-owned inbox" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Browser agents, research agents, support agents, and other systems that need a dedicated machine-owned email identity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inbox creation by API:&lt;/strong&gt; provision one inbox per agent, customer, or workflow without a human OAuth flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time events:&lt;/strong&gt; webhooks and WebSockets deliver received, sent, delivered, bounced, and rejected message events.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email primitives for agents:&lt;/strong&gt; threads, replies, attachments, labels, custom domains, semantic search, SDKs, and MCP are first-class features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scoped permissions:&lt;/strong&gt; API keys and webhooks can be limited to an inbox or a group of inboxes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Does not connect existing mailboxes:&lt;/strong&gt; users cannot authorize their Gmail or Outlook inbox. AgentMail explicitly runs as a separate email provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email only:&lt;/strong&gt; the agent still needs another integration platform to update a CRM, help desk, calendar, or other SaaS API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No coding-agent integration skill:&lt;/strong&gt; AgentMail provides SDKs and MCP, but no dedicated skill for building and testing integrations with coding agents.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Composio
&lt;/h3&gt;

&lt;p&gt;Composio connects AI agents to pre-built toolkits and trigger types. For email, it provides Gmail and Outlook tools. Outlook events arrive in real time, while Gmail events use polling and can take about 15 minutes with Composio-managed auth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Personal agents and internal automations that can use Composio’s pre-built email trigger types.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pre-built Gmail and Outlook tools:&lt;/strong&gt; agents can read messages, manage mailbox objects, and send replies through existing toolkit actions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One webhook destination:&lt;/strong&gt; Composio signs events and includes the trigger metadata needed to route them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools outside email:&lt;/strong&gt; the triggered agent can call actions from other Composio toolkits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuz7no8kjw1y5byd5si8d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuz7no8kjw1y5byd5si8d.png" alt="Composio dashboard for connected apps and agent tools" width="799" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;May 2026 security incident:&lt;/strong&gt; HubSpot reported that unauthorized access to Composio systems exposed OAuth credentials and API keys used in Composio toolkits. HubSpot rotated credentials used with Composio’s HubSpot toolkit, then found no evidence that HubSpot or its customer accounts were compromised (&lt;a href="https://trust.hubspot.com/?wfoid=f72782a6e6.1781395200" rel="noopener noreferrer"&gt;HubSpot’s security update&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gmail latency:&lt;/strong&gt; managed Gmail triggers poll and can take about 15 minutes, which is too slow for time-sensitive support or routing workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-built trigger types:&lt;/strong&gt; you choose from the triggers that a toolkit exposes. Custom tools can run in your application process, but they do not provide a durable, hosted custom-trigger runtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No mailbox data sync:&lt;/strong&gt; a trigger detects an event, but it does not maintain an incremental local copy of the mailbox for history or recovery.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to process an email trigger safely
&lt;/h2&gt;

&lt;p&gt;Incoming email is untrusted input. A sender can place prompt-injection instructions in the body, hide text in HTML, or attach a malicious file. Treat the message as data, not as instructions that can override the agent’s policy.&lt;/p&gt;

&lt;p&gt;A reliable handler follows this sequence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Verify the webhook signature&lt;/strong&gt; before parsing the payload.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Return **`&lt;/strong&gt;200 OK*&lt;em&gt;`&lt;/em&gt;* quickly** and queue the work. Provider delivery should not wait for the LLM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deduplicate by event and message ID.&lt;/strong&gt; Gmail, Microsoft Graph, Nylas, and other systems can deliver the same change more than once.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fetch the message&lt;/strong&gt; from the provider when the event contains only a cursor or object ID.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Normalize the content:&lt;/strong&gt; convert HTML to text, remove quoted history and signatures, and scan attachments before extraction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resolve the tenant and connection&lt;/strong&gt; before loading context or tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Give the agent a narrow tool set.&lt;/strong&gt; A support email should not make payroll or destructive admin tools available. See our guide to &lt;a href="https://nango.dev/blog/build-reliable-tool-calls-for-ai-agents-integrating-with-external-apis" rel="noopener noreferrer"&gt;reliable and scoped tool calls&lt;/a&gt; for the authorization pattern.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Require approval for high-risk writes:&lt;/strong&gt; refunds, payments, account changes, bulk sends, and access-control changes should stop for a human decision.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Record an audit trail&lt;/strong&gt; containing the message ID, agent run, tool calls, approvals, and final result.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run a periodic incremental sync&lt;/strong&gt; to recover any provider notification that was delayed or dropped.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Which tool should you choose?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Choose &lt;strong&gt;Nango&lt;/strong&gt; when email is the trigger for a customer-facing agent workflow and you need custom provider logic, polling fallbacks, coding-agent support, and tools across many APIs.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Nylas&lt;/strong&gt; when one normalized Email API matters more than access to non-communications APIs.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Pipedream Connect&lt;/strong&gt; when your team prefers a low-code visual workflow builder for internal automation.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;AgentMail&lt;/strong&gt; when the agent should have its own inbox instead of acting through a user’s existing address.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Composio&lt;/strong&gt; for personal agents or internal automation when its pre-built Gmail or Outlook trigger and provider-dependent latency are sufficient, and after reviewing the May 2026 incident for your security requirements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Zapier, Make, and n8n also trigger workflows from incoming email, but they are better suited to internal automation where a team member owns the workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the best way to trigger an AI agent from Gmail?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nango is the best fit when a Gmail email should trigger a customer-facing agent and actions in other APIs. Its coding-agent skill builds the Pub/Sub webhook, &lt;code&gt;history.list&lt;/code&gt; sync, watch renewal, and recovery schedule, then Nango runs them with the correct user’s connection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can Gmail send a webhook directly to my AI agent?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Gmail publishes mailbox-change notifications to a Google Cloud Pub/Sub topic, and the payload contains a cursor rather than the email body. With Nango, Pub/Sub posts to the Nango webhook, Nango resolves the customer connection and fetches the change, then your event handler queues the agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I trigger an AI agent from Outlook email?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use Nango when the Outlook trigger also needs to call other customer APIs. A coding agent can build the Microsoft Graph subscription, &lt;code&gt;clientState&lt;/code&gt; verification, message fetch, renewal function, and agent event on Nango’s runtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I trigger an agent from Apple iCloud Mail?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use a Nango sync when an iCloud email should trigger an agent that also acts in other APIs. A coding agent can build the IMAP &lt;code&gt;IDLE&lt;/code&gt; or incremental polling logic, store the last UID, and emit an event when it finds a new message. Nylas is an alternative when you only need a normalized communications API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should the agent receive the full email in the webhook?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Usually not. A small event containing the connection, message ID, and cursor is easier to verify, deduplicate, and retry. Fetch the message after the event is queued, then sanitize the HTML and attachments before sending selected content to the model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can an email trigger call tools in other APIs?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. With Nango, the email event identifies the user’s connection and the agent calls scoped tools across the same 900+ API catalog. Nango keeps OAuth credentials outside the model, resolves the customer connection, validates tool inputs, and logs each call.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Nylas fits teams that only need one communications API across mailbox providers. Pipedream makes sense for low-code internal workflows. AgentMail provides dedicated inboxes for agents but does not connect existing mailboxes or other APIs. Composio supports pre-built Gmail and Outlook triggers, but teams should evaluate its latency and security history.&lt;/p&gt;

&lt;p&gt;For developers building customer-facing agents, Nango covers the path from incoming email to the task that follows. It supports Gmail, Microsoft 365, Outlook, iCloud, and other mailboxes. Provider webhooks and scheduled syncs deliver new-message events to your application, while the same platform gives the agent scoped tools across CRM, help desk, Slack, accounting, and 900+ other APIs. This avoids combining separate platforms for mailbox events and downstream actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/how-to-build-a-gmail-api-integration-with-nango-and-claude" rel="noopener noreferrer"&gt;How to build a Gmail API integration with Nango and Claude&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/how-to-make-ai-agents-react-to-api-webhooks" rel="noopener noreferrer"&gt;How to make AI agents react to API webhooks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/how-to-build-a-real-time-google-calendar-api-integration" rel="noopener noreferrer"&gt;How to build a real-time Google Calendar API integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/build-reliable-tool-calls-for-ai-agents-integrating-with-external-apis" rel="noopener noreferrer"&gt;How to build reliable tool calls for AI agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-integration-platform-for-mail-and-calendar-integrations" rel="noopener noreferrer"&gt;Best integration platforms for mail and calendar integrations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Best enterprise-grade AI agent integration providers in 2026</title>
      <dc:creator>Sapnesh Naik</dc:creator>
      <pubDate>Fri, 31 Jul 2026 01:26:46 +0000</pubDate>
      <link>https://dev.to/nangohq/best-enterprise-grade-ai-agent-integration-providers-in-2026-4pcn</link>
      <guid>https://dev.to/nangohq/best-enterprise-grade-ai-agent-integration-providers-in-2026-4pcn</guid>
      <description>&lt;p&gt;AI agents increasingly connect to external APIs and need API integrations for tasks like refunding payments or updating records in Salesforce. Enterprises are also looking for secure, compliant, and easy-to-integrate platforms for AI agents.&lt;/p&gt;

&lt;p&gt;This post compares six integration platforms for enterprise AI agents in detail: Nango, Arcade, Composio, Pipedream Connect, Workato, and Paragon. For the general comparison, see &lt;a href="https://nango.dev/blog/best-ai-agent-integration-platforms/" rel="noopener noreferrer"&gt;Best AI agent integration platforms&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;For an enterprise, the integration platform becomes part of your product’s security surface. It stores customer credentials, executes calls on their behalf, and is reviewed as part of every security review and procurement process.&lt;/p&gt;

&lt;p&gt;Three platforms worth evaluating in 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nango:&lt;/strong&gt; An integration platform connecting your AI agent to 900+ APIs and 6,000+ pre-built tool calls, customizable with code. SOC 2 Type II, GDPR, and HIPAA with a BAA, deployable in any region via bring-your-own-cloud. Open source.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Arcade:&lt;/strong&gt; An MCP-native runtime with per-user authorization, scoping credentials per tool. SOC 2 compliant, with RBAC only rolling out in July 2026, and tool calls are not audit logged. No syncs or webhooks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Composio:&lt;/strong&gt; A hosted catalog of 1,047 toolkits. Closed-source runtime and a history of security incidents, with governance and audit gated behind the enterprise tier. Suits internal automation more than customer-facing integrations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We also cover Workato, Pipedream Connect, and Paragon below, but they suit narrower cases than the three above.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are integration platforms for AI agents?
&lt;/h2&gt;

&lt;p&gt;An integration platform for AI agents sits between an agent and the external APIs it acts on. It handles the work that is time-consuming and security-sensitive to rebuild for every provider: the OAuth handshake and credential storage, a &lt;a href="https://nango.dev/blog/build-reliable-tool-calls-for-ai-agents-integrating-with-external-apis/" rel="noopener noreferrer"&gt;tool definition&lt;/a&gt; for each API operation, execution with the correct end user’s credentials, and an audit trail for every call.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftqajq7fxx7o23ao6wlf2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftqajq7fxx7o23ao6wlf2.png" alt="how an agent integration platform brokers credentials" width="800" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a product with more than one customer, the platform also routes each tenant to its own credentials, checks that the calling user is permitted to run a given tool before it runs, and executes calls in isolation with an audit trail for each call. It also queues each tenant’s work fairly, so one customer’s load does not delay another.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmbhqpmn346uxs0crumck.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmbhqpmn346uxs0crumck.png" alt="how a multi-tenant integration platform isolates each customer's credentials and execution" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This platform stores your users’ credentials and calls external APIs on their behalf. Those responsibilities place it within the scope of a security review, unlike most dependencies a team adds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Most platforms expose tools over the Model Context Protocol, direct API calls, or both. The choice is covered in detail in &lt;a href="https://nango.dev/blog/mcp-vs-tool-calls-for-ai-agents/" rel="noopener noreferrer"&gt;MCP vs tool calls for AI agents&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes an agent integration platform enterprise-ready?
&lt;/h2&gt;

&lt;p&gt;We use the following criteria to determine whether a platform meets enterprise requirements. They cover what a security review checks for, and whether the team can ship the integrations its product needs.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;What to verify&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Compliance&lt;/td&gt;
&lt;td&gt;SOC 2 Type II and its scope, GDPR with a signed DPA, HIPAA with a BAA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;Managed cloud, private deployment, self-hosting maturity, EU data residency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security architecture&lt;/td&gt;
&lt;td&gt;Credential encryption, key custody, tenant execution isolation, and incident history&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Governance&lt;/td&gt;
&lt;td&gt;RBAC, SSO, and SAML, per-user permission checks on tool calls, approval flows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Observability&lt;/td&gt;
&lt;td&gt;Request-level tool-call logs, administrative audit trails, SIEM export&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool-call overhead&lt;/td&gt;
&lt;td&gt;A published latency figure, with the methodology, percentile, and test setup behind it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tenant fairness&lt;/td&gt;
&lt;td&gt;Per-tenant queues or concurrency caps, so one customer's load does not delay another's&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ownership&lt;/td&gt;
&lt;td&gt;Whether tool definitions live in your version control, reviewed, and deployed like application code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open source&lt;/td&gt;
&lt;td&gt;Whether the runtime that executes your tools is public and auditable, and whether you could keep running it if the vendor disappeared&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coding agents build integrations&lt;/td&gt;
&lt;td&gt;Whether coding agents like Claude Code, Cursor, and Codex can research an API, write the integration as code, and test it against a real connection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Breadth&lt;/td&gt;
&lt;td&gt;Catalog size, custom tools as code, Git, and CI workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Support&lt;/td&gt;
&lt;td&gt;Contractual SLAs, dedicated support, DPAs, and subprocessor lists&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For more on the authentication criterion, see the &lt;a href="https://nango.dev/blog/guide-to-secure-ai-agent-api-authentication/" rel="noopener noreferrer"&gt;guide to secure AI agent API authentication&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best enterprise-ready AI agent integration providers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Nango
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nango connects your AI agent to &lt;a href="https://nango.dev/api-integrations" rel="noopener noreferrer"&gt;900+ APIs&lt;/a&gt; and 6,000+ pre-built tool calls, with managed auth and credential storage. You can use the catalog out of the box, then customize what you need with code on infrastructure built for scale. Hundreds of &lt;a href="https://nango.dev/customers?category=ai-agents" rel="noopener noreferrer"&gt;AI companies&lt;/a&gt; run Nango in production.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxdua4mqza1ra3hpv8nq4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxdua4mqza1ra3hpv8nq4.png" alt="Nango dashboard showing a live connection with its syncs running on schedule" width="799" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nango also supports data syncs (pulling external data for RAG context) and webhooks on the same platform.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuwnldfprxbpzcur2g7r7.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuwnldfprxbpzcur2g7r7.gif" alt="Claude Code generating a Nango sync with the AI integration builder skill" width="760" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams looking for a large API catalog and customizable pre-built tool calls for AI agents. Also suitable for teams seeking full enterprise readiness with multi-tenant isolation, access control, audit trails, compliance (SOC 2, GDPR, HIPAA), and deployment in their own cloud and region.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wide API coverage and tool-call support:&lt;/strong&gt; Connect agents to 900+ APIs across every auth type (OAuth, JWT, ID-JAG, Basic) with 6,000+ pre-built tool calls, customizable with an AI coding agent through the &lt;a href="https://nango.dev/blog/nango-api-integrations-builder-skill" rel="noopener noreferrer"&gt;Nango API integrations builder skill&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance and procurement:&lt;/strong&gt; SOC 2 Type II, GDPR with a DPA that applies to every cloud account, and HIPAA with a BAA on request, backed by a public subprocessor list and a &lt;a href="https://trust.nango.dev/" rel="noopener noreferrer"&gt;trust center&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-tenant runtime:&lt;/strong&gt; Each customer’s executions run isolated and fairly queued on a &lt;a href="https://nango.dev/blog/how-nango-runs-untrusted-customer-code-at-scale" rel="noopener noreferrer"&gt;scalable runtime&lt;/a&gt;, with AES-256-GCM credential encryption and tool-call overhead under 100ms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permissions and audit trail:&lt;/strong&gt; &lt;a href="https://nango.dev/blog/launching-rbac-and-our-commitment-to-the-enterprise/" rel="noopener noreferrer"&gt;RBAC&lt;/a&gt;, SAML SSO, and permission-scoped API keys enforce what each user and agent can do, and every tool call, sync, and webhook is logged and exportable over OpenTelemetry.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0w4b3yid6lv2jmmyasrq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0w4b3yid6lv2jmmyasrq.png" alt="Nango observability dashboard showing detailed API integration logs" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data syncs and webhooks:&lt;/strong&gt; Sync data from external APIs for RAG, or trigger agents on &lt;a href="https://nango.dev/blog/how-to-trigger-ai-agents-on-salesforce-webhooks" rel="noopener noreferrer"&gt;webhooks from external APIs&lt;/a&gt; on the same platform.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mature self-hosted offering (BYOC):&lt;/strong&gt; Enterprise bring-your-own-cloud runs a fully managed Nango in your own cloud account and region, at &lt;a href="https://nango.dev/blog/best-self-hosted-api-integration-platforms-for-ai-agents/" rel="noopener noreferrer"&gt;feature parity&lt;/a&gt; with the managed cloud.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open source, customizable with code:&lt;/strong&gt; Build a tool as TypeScript in your own repo and review it like application code, on a runtime that is &lt;a href="https://github.com/NangoHQ/nango" rel="noopener noreferrer"&gt;open source on GitHub&lt;/a&gt; so you can audit what executes your tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free self-hosting is scoped:&lt;/strong&gt; Functions, syncs, webhooks, MCP, RBAC, SAML, and OpenTelemetry export need Enterprise self-hosting or Nango Cloud. The split is documented.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Arcade
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Arcade is an MCP-native tool-calling runtime built around delegated user authorization. Credentials are scoped to each tool, consent is stepped up as new scopes are needed, and the token itself is never exposed to the model or the client.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8q6opzkwmha9ql67rudw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8q6opzkwmha9ql67rudw.png" alt="Arcade audit log dashboard listing administrative events only, with no tool executions" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams that only need MCP tool calling with per-user access control, can bring their own policy layer, and are okay with only a SOC 2 Type II certification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tool metadata for policies:&lt;/strong&gt; Read-only, destructive, idempotent, and open-world tags let admins govern tools by what they actually do.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosting for data residency:&lt;/strong&gt; Enterprise-plan self-hosting (including on-premises and air-gapped) is the documented way to keep data outside the US.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fits your existing stack:&lt;/strong&gt; Works with popular agent frameworks and MCP clients like Cursor, Claude, and VS Code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tool calls are not audit logged:&lt;/strong&gt; Audit logs cover administrative events but not tool executions, which Arcade lists as future work. For a governance platform that is the compliance-critical event.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RBAC only just shipping:&lt;/strong&gt; Default RBAC began rolling out to new Cloud signups in July 2026 and is not yet generally available to existing organizations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thin compliance:&lt;/strong&gt; SOC 2 Type II is the only certification Arcade publicly claims, with no HIPAA BAA, ISO 27001, or published DPA, and the trust center is access-gated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;US-only cloud:&lt;/strong&gt; EU data residency requires full self-hosting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No syncs or webhooks:&lt;/strong&gt; The catalog is around 80 toolkits and covers tool calls only, so retrieval and event handling need a second platform. The Engine that stores tokens and executes calls is proprietary, so only the tool-authoring framework can be audited.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Composio
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Composio has 1,047 toolkits, and each toolkit can contain a large number of tools (over 800 for GitHub, for example). Its tool search lets an agent query the catalog and pull schemas on demand, so a large catalog does not have to be loaded into context up front.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In May 2026, Composio disclosed a security incident. A compromised employee Gmail OAuth token let an attacker intercept a magic-link sign-in to an internal tool, register malicious tool definitions, and reach the execution sandbox and the credential cache behind it. Around 5,001 GitHub OAuth tokens and 5,241 API keys were compromised or likely exposed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F57s2hfu50ra4q2pixgdh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F57s2hfu50ra4q2pixgdh.png" alt="Composio platform dashboard showing the agent setup flow with framework, language, and toolkit options" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Internal and personal automation, where a team connects its own agents to APIs rather than shipping integrations to end customers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosted deployment:&lt;/strong&gt; Teams that cannot use the managed cloud can run Composio on their own infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detailed execution logs:&lt;/strong&gt; Rich filtering and full request/response payloads through the API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Broad framework support:&lt;/strong&gt; MIT-licensed Python and TypeScript SDKs with adapters for popular agent frameworks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fallout from the May 2026 incident:&lt;/strong&gt; Composio mandated API key rotation for every customer, not only those affected, and the cleanup broke integrations. Its own status page records roughly 32 hours of broken CLI authentication across three days, and API-key connections it could not revoke on customers’ behalf were left for each end user to rotate at the provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Closed-source runtime:&lt;/strong&gt; The public repository holds SDKs and adapters only, so customers cannot audit what executes their tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Governance and audit behind the enterprise tier:&lt;/strong&gt; Composio documents five roles with action-level RBAC and audit trails for every tool call, but as enterprise-tier features rather than defaults on the lower paid plans.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No HIPAA or BAA:&lt;/strong&gt; Composio is certified for SOC 2 Type II and ISO 27001:2022, but its trust center lists no HIPAA compliance and it offers no Business Associate Agreement, so regulated health data is off the table.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a direct comparison, see &lt;a href="https://nango.dev/blog/composio-vs-nango/" rel="noopener noreferrer"&gt;Composio vs Nango&lt;/a&gt; and &lt;a href="https://nango.dev/blog/composio-alternatives/" rel="noopener noreferrer"&gt;Composio alternatives&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Pipedream Connect
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pipedream Connect offers the broadest app coverage in this comparison, 3,000+ apps and 10,000+ tools, each behind managed authentication so an agent can call it without handling credentials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pipedream Connect appears to be no longer actively maintained. Pipedream’s changelog lists no release since October 2025, and its self-hostable MCP reference implementation, last updated in November 2025, is documented as no longer maintained. Workday’s acquisition of Pipedream was announced in November 2025.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbtqv5m81xvezxuk7y0bm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbtqv5m81xvezxuk7y0bm.png" alt="Pipedream Connect developer page for its integration SDK" width="800" height="660"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams that want a large, open-source component catalog and a signed HIPAA BAA, and can accept that Connect is no longer actively developed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auditable open-source components:&lt;/strong&gt; Every Pipedream Connect component is defined as Node.js source in a public repository, so you can read exactly what a tool does before you ship it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HIPAA with a BAA:&lt;/strong&gt; Pipedream signs Business Associate Addendums with Business-tier customers, and Connect is on its documented list of services eligible to handle PHI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No burst protection for tool calls:&lt;/strong&gt; Pipedream’s tool calls run through the SDK, which its event queues do not cover, so a burst of calls hits cold-start delays instead of being queued.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;End-user isolation delegated to your app:&lt;/strong&gt; Pipedream separates end users by an ID your app passes in, so isolation between them is only as strong as your own authentication.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Workato Embedded
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Workato is an enterprise automation platform built around a no-code visual builder and 1,200+ prebuilt connectors. Its Enterprise MCP offering exposes the recipes built there to agents as tools, with no integration code required.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7lqk22oam54981dlfvgf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7lqk22oam54981dlfvgf.png" alt="Workato homepage showing its control plane and execution plane" width="800" height="622"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Non-technical teams that want to expose recipes to agents through a visual builder, and value broad compliance coverage over a code-first workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Broad compliance coverage:&lt;/strong&gt; SOC 1 and SOC 2 Type II, ISO 27001, ISO 42001 for AI management systems, and HIPAA with signed BAAs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-user identity with approvals:&lt;/strong&gt; With Verified User Access, each action runs as the actual end user and inherits their own permissions, not those of a shared service account. Agent Guardrails can then route high-stakes actions to Slack or Teams for sign-off first.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No code-first tool definition:&lt;/strong&gt; Agent tools are recipes built in Workato’s visual builder, not authored in code, so the integration logic never enters your repository or code review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud-only, with capacity you negotiate:&lt;/strong&gt; The MCP server runs only in Workato’s cloud; the on-prem agent is a connectivity tunnel back to it, not a way to self-host. Recipe concurrency is capped at 30 jobs unless you ask support to raise it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Paragon
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Paragon is an embedded integration platform. Its ActionKit product exposes integration actions to agents as tools. Its Managed Sync product keeps synced files aligned with each source’s access rules, so a retrieval pipeline can respect third-party permissions without reimplementing each provider’s model. Workflows are written in Paragraph, a TypeScript framework that can sync bidirectionally with your GitHub repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fisjz8dv3vvfvlrhep1dt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fisjz8dv3vvfvlrhep1dt.png" alt="Paragon homepage describing integration infrastructure for AI products" width="799" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams building RAG over file-storage sources like Google Drive and SharePoint. Paragon’s Permissions API keeps each source’s own access rules in place. It fits if you can accept that its SOC 2 report date and BAA terms aren’t stated publicly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documented self-hosting:&lt;/strong&gt; Paragon publishes a full self-host guide, covering the architecture, system requirements, Terraform and EKS assets, and expected infrastructure costs, plus a code-first workflow through Paragraph and Git Sync.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permissions travel with the data:&lt;/strong&gt; The Permissions API records each file’s source access rules as it syncs, across Box, Confluence, Dropbox, Google Drive, OneDrive, and SharePoint. A RAG pipeline can then show each user only what they are allowed to see, instead of reimplementing every provider’s permission model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HIPAA compliance without a BAA:&lt;/strong&gt; Paragon claims SOC 2 Type II, GDPR, and HIPAA, but it does not offer a Business Associate Agreement, the contract you need before sending health data through it. Its SOC 2 report is only available on request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No per-action authorization:&lt;/strong&gt; JWT Permissions gate access at the integration and API-class level, all ActionKit requests on or off, for instance, with no rule for a single action. Action-level control falls to the underlying provider.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Comparison of solutions
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Nango&lt;/th&gt;
&lt;th&gt;Arcade&lt;/th&gt;
&lt;th&gt;Composio&lt;/th&gt;
&lt;th&gt;Pipedream Connect&lt;/th&gt;
&lt;th&gt;Workato&lt;/th&gt;
&lt;th&gt;Paragon&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Compliance&lt;/td&gt;
&lt;td&gt;SOC 2, GDPR, HIPAA&lt;/td&gt;
&lt;td&gt;SOC 2 only&lt;/td&gt;
&lt;td&gt;SOC 2, ISO 27001&lt;/td&gt;
&lt;td&gt;SOC 2, HIPAA&lt;/td&gt;
&lt;td&gt;SOC 2, ISO, HIPAA&lt;/td&gt;
&lt;td&gt;SOC 2, GDPR, HIPAA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;Cloud + BYOC + free self-host&lt;/td&gt;
&lt;td&gt;Cloud + Paid self-host&lt;/td&gt;
&lt;td&gt;Cloud + Paid self-host&lt;/td&gt;
&lt;td&gt;Cloud only&lt;/td&gt;
&lt;td&gt;Cloud only&lt;/td&gt;
&lt;td&gt;Cloud + paid self-host&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security architecture&lt;/td&gt;
&lt;td&gt;Isolated per customer&lt;/td&gt;
&lt;td&gt;Undocumented&lt;/td&gt;
&lt;td&gt;Closed runtime&lt;/td&gt;
&lt;td&gt;Delegated&lt;/td&gt;
&lt;td&gt;Isolation is paid&lt;/td&gt;
&lt;td&gt;Per-user isolation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Governance&lt;/td&gt;
&lt;td&gt;Comprehensive&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;Comprehensive&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Observability&lt;/td&gt;
&lt;td&gt;Comprehensive&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;Comprehensive&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool-call overhead&lt;/td&gt;
&lt;td&gt;Under 100ms&lt;/td&gt;
&lt;td&gt;Not published&lt;/td&gt;
&lt;td&gt;Not published&lt;/td&gt;
&lt;td&gt;Not published&lt;/td&gt;
&lt;td&gt;Not published&lt;/td&gt;
&lt;td&gt;Not published&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tenant fairness&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ownership&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open source&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coding agents build integrations&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Breadth&lt;/td&gt;
&lt;td&gt;900+ APIs, 6,000+ tools&lt;/td&gt;
&lt;td&gt;80+ toolkits&lt;/td&gt;
&lt;td&gt;1,047 toolkits&lt;/td&gt;
&lt;td&gt;3,000+ apps, 10,000+ tools&lt;/td&gt;
&lt;td&gt;1,200+ connectors&lt;/td&gt;
&lt;td&gt;79 integrations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Support&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  How we applied the criteria
&lt;/h3&gt;

&lt;p&gt;We checked each entry against the vendor’s own documentation, terms of service, pricing pages, changelogs, and public repositories, treating documentation as authoritative where it disagreed with marketing. No vendor publishes a tool-call latency figure with a methodology behind it, so that row records each vendor’s own claim rather than a measured comparison.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ: Enterprise-ready agent integrations
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the best enterprise AI agent integration platform?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nango is best for enterprise agent integrations. It is SOC 2 Type II, GDPR, and HIPAA compliant with a BAA, open source, so the runtime executing your tools can be audited, and self-hostable at feature parity with the managed cloud. On top of that, coding agents like Claude Code, Cursor, and Codex build API integrations as code in your own repository. Nango covers tool calls, data syncs, and webhooks across 900+ APIs. The comparison table covers how the others differ.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do AI agents authenticate with external APIs securely?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Through a platform like Nango that holds the credentials. The platform completes the OAuth flow, stores the token encrypted, and injects it at call time, so the model sees tool inputs and outputs but never the token.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which AI agent integration platforms are SOC 2 or HIPAA compliant?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All six claim SOC 2, though the scope varies. Nango, Workato, and Pipedream go further and sign a BAA for HIPAA. Nango publishes SOC 2 Type II, GDPR, and HIPAA evidence in its &lt;a href="https://trust.nango.dev/" rel="noopener noreferrer"&gt;trust center&lt;/a&gt;, with a DPA that applies automatically to every cloud account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I self-host an AI agent integration platform?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every platform compared here offers some form of self-hosting except Workato, which is cloud-only. Nango offers free self-hosting, plus Enterprise bring-your-own-cloud that deploys a fully managed Nango into your own AWS, GCP, or Azure account and region, at feature parity with the managed cloud and with no maintenance or scaling on your side.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I control which users or agents can call which tools?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The main control is identity at runtime. Each end user should act through their own stored credentials, not a shared service account, so a tool call only reaches what that user connected. Team access is separate: RBAC sets what your members can do, and SSO handles their login. Nango covers both, and scopes API keys to specific permissions on top.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I audit what an AI agent did?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Only if the platform logs tool executions, not just administrative events. Look for a request-level record of every tool call, which user ran it, which tool, and what result, that you can export to your own SIEM over a standard like OpenTelemetry. Some platforms log admin actions but not the tool calls themselves, the compliance-critical event. Nango logs every tool call, sync, and webhook and exports over OpenTelemetry.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Enterprises adopting agent integrations need broad API coverage on a runtime they can put through a security review and deploy in their own region. Of the six platforms here, Nango is the strongest fit.&lt;/p&gt;

&lt;p&gt;It connects agents to 900+ APIs with 6,000+ pre-built tool calls, customizable with code, and carries SOC 2 Type II, GDPR, and HIPAA with a BAA. It deploys in your own cloud via BYOC, with an &lt;a href="https://github.com/NangoHQ/nango" rel="noopener noreferrer"&gt;open source&lt;/a&gt; runtime you can audit.&lt;/p&gt;

&lt;p&gt;To get started, follow the &lt;a href="https://nango.dev/docs/getting-started/quickstart" rel="noopener noreferrer"&gt;Nango quickstart&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-ai-agent-integration-platforms/" rel="noopener noreferrer"&gt;Best AI agent integration platforms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/guide-to-secure-ai-agent-api-authentication/" rel="noopener noreferrer"&gt;Guide to secure AI agent API authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-self-hosted-api-integration-platforms-for-ai-agents/" rel="noopener noreferrer"&gt;Best self-hosted API integration platforms for AI agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-unified-api-platform-for-ai-agents-and-rag/" rel="noopener noreferrer"&gt;Best unified API platform for AI agents and RAG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/launching-rbac-and-our-commitment-to-the-enterprise/" rel="noopener noreferrer"&gt;Launching RBAC and our commitment to the Enterprise&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>agents</category>
      <category>oauth</category>
    </item>
    <item>
      <title>Best token vaults and credential management tools for AI agents in 2026</title>
      <dc:creator>Sapnesh Naik</dc:creator>
      <pubDate>Fri, 31 Jul 2026 01:26:05 +0000</pubDate>
      <link>https://dev.to/nangohq/best-token-vaults-and-credential-management-tools-for-ai-agents-in-2026-22dc</link>
      <guid>https://dev.to/nangohq/best-token-vaults-and-credential-management-tools-for-ai-agents-in-2026-22dc</guid>
      <description>&lt;p&gt;AI agents connect to APIs such as Salesforce, Slack, MS Teams, Drive, and Calendar to work on behalf of users or operate autonomously. These integrations use the same APIs that SaaS products traditionally use for embedded integrations.&lt;/p&gt;

&lt;p&gt;The security model is different when connecting these APIs to AI agents. You need to grant agents API access without exposing credentials. You also need to handle authentication tasks such as token refresh and different auth types, including OAuth 2.0, OAuth 2.1, Basic auth, and API keys.&lt;/p&gt;

&lt;p&gt;This post compares four secure credential management tools for AI agents to help you choose the right one for your use case.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;A token vault is a credential store that sits between an AI agent and external APIs, much like a password manager for user accounts. Token vaults are necessary because most agents run without a browser for interactive logins and lack secure credential storage.&lt;/p&gt;

&lt;p&gt;Top four agent credential management tools in 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nango:&lt;/strong&gt; An open-source credential layer for AI agents that spans &lt;a href="https://nango.dev/api-integrations" rel="noopener noreferrer"&gt;900+ APIs and 6,000+ pre-built tool calls&lt;/a&gt;. It supports all auth types, multi-tenant credential scoping, and direct token access through the API or SDK. It can be self-hosted or run in your own cloud and region through BYOC.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth0:&lt;/strong&gt; An OAuth-only token store from an identity provider, with 30+ pre-built providers. It’s closed-source and cloud-only. Your application receives a short-lived provider token and makes the API calls itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Arcade:&lt;/strong&gt; An MCP-native tool-calling runtime for agents where each user connects their own accounts. Tool executions are not included in the audit log, and the platform is not open source.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Composio:&lt;/strong&gt; A hosted platform for agent tool calls. The credential store is closed source, and a security incident in May 2026 exposed customer connections and API keys.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is a token vault for AI agents?
&lt;/h2&gt;

&lt;p&gt;AI agent authentication must support credential types designed for user interaction. OAuth, for example, is used by most APIs and assumes that a person is present to grant consent. API keys pose another issue: no one rotates them unless you automate it. It can also be difficult to determine whether the agent is acting on a user’s task or on its own.&lt;/p&gt;

&lt;p&gt;A token vault moves credential storage and management into a separate service. It stores each token, refreshes and revokes it, and injects it only when a call is made. The agent never holds a raw secret, and every use of a credential is recorded in a single audit trail.&lt;/p&gt;

&lt;p&gt;This keeps the agent’s workflow simple: the agent calls a tool without handling the raw credentials. The agent does not see the provider’s refresh token. The user connects and authorizes once, and the vault manages the rest.&lt;/p&gt;

&lt;p&gt;An agent API tool-call execution model looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhn87lt07w5fq5vl7gz1f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhn87lt07w5fq5vl7gz1f.png" alt="Sequence diagram showing a user authorizing an account, an AI agent requesting an API action, and a token vault refreshing and injecting the credential" width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The responsibilities of a token vault cover the full lifecycle of a credential:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Store credentials encrypted at rest&lt;/li&gt;
&lt;li&gt;Refresh, rotate, and revoke tokens throughout their lifecycle&lt;/li&gt;
&lt;li&gt;Authenticate the agent and inject the right token into each request&lt;/li&gt;
&lt;li&gt;Scope each credential to an identity and its permissions&lt;/li&gt;
&lt;li&gt;Log every credential use for audit&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to choose a token vault for AI agents
&lt;/h2&gt;

&lt;p&gt;For a customer-facing product, we compare token vaults on the criteria below. They cover the questions that security, platform, compliance, and product teams raise during an evaluation.&lt;/p&gt;

&lt;h3&gt;
  
  
  The bare minimum
&lt;/h3&gt;

&lt;p&gt;These are the baseline capabilities a production token vault should meet.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;th&gt;What to verify&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Automatic OAuth refresh&lt;/td&gt;
&lt;td&gt;Access tokens expire, so the vault has to refresh them for every connection or calls fail mid-task&lt;/td&gt;
&lt;td&gt;Whether OAuth tokens are refreshed automatically, with no human in the loop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rotation and revocation&lt;/td&gt;
&lt;td&gt;A leaked or offboarded credential has to be rotated or revoked in one place, not chased across services&lt;/td&gt;
&lt;td&gt;Whether tokens and keys can be rotated and revoked centrally, per connection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Encryption and isolation&lt;/td&gt;
&lt;td&gt;Stored credentials must be encrypted at rest, and one tenant's tokens must never reach another&lt;/td&gt;
&lt;td&gt;Encryption at rest and tenant isolation, expected of every vault as a baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Credential never leaves the vault&lt;/td&gt;
&lt;td&gt;A credential your own runtime holds can be stolen from it, and a prompt injection can only leak what the agent can reach&lt;/td&gt;
&lt;td&gt;Whether the vault runs the call with the credential or hands the credential to your application to use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standards support&lt;/td&gt;
&lt;td&gt;Open standards keep you portable and interoperable instead of tied to one vendor's scheme&lt;/td&gt;
&lt;td&gt;OAuth 2.0/2.1, OIDC, and agent standards such as MCP Auth&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Differentiating criteria
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;th&gt;What to verify&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;Where your customers' tokens physically live sets data residency and the trust boundary&lt;/td&gt;
&lt;td&gt;Managed cloud, deployment in your own cloud account, self-hosting, and how mature the self-host path is&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ownership and portability&lt;/td&gt;
&lt;td&gt;Locked-in credentials mean you cannot switch vendors without every user re-authorizing&lt;/td&gt;
&lt;td&gt;White-label authorization under your brand and API export of stored credentials&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open source&lt;/td&gt;
&lt;td&gt;You can audit the code that holds credentials and keep running it no matter what happens to the vendor&lt;/td&gt;
&lt;td&gt;Whether the runtime that stores and refreshes credentials is public and auditable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Credential types&lt;/td&gt;
&lt;td&gt;An OAuth-only vault leaves every API-key or custom-auth integration for you to build&lt;/td&gt;
&lt;td&gt;OAuth, API keys, basic auth, and custom schemes, not OAuth alone&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identity scoping&lt;/td&gt;
&lt;td&gt;Each call must run under the right identity with only the access that identity was granted&lt;/td&gt;
&lt;td&gt;Which identities a credential can be scoped to (user, org, workspace, or bot), and whether role-based controls apply per token or API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authentication methods&lt;/td&gt;
&lt;td&gt;The agent-to-vault connection is itself an attack surface, and a static key is the weakest option&lt;/td&gt;
&lt;td&gt;Machine-first methods such as OpenID Connect, signed JWTs, or mTLS, beyond a static API key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audit of credential use&lt;/td&gt;
&lt;td&gt;After an incident, you need to see which agent used which credential and export the record for compliance&lt;/td&gt;
&lt;td&gt;Request-level logs of credential use and external API calls, exportable to SIEM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Connection health notifications&lt;/td&gt;
&lt;td&gt;A provider token can expire or be revoked at any time, and an unnoticed broken connection breaks the product for that customer&lt;/td&gt;
&lt;td&gt;Webhooks or events for connection creation, refresh failure, and expiry, so your product can prompt the user to re-authorize&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Service breadth&lt;/td&gt;
&lt;td&gt;A thin catalog means building and maintaining OAuth flows the vault does not cover&lt;/td&gt;
&lt;td&gt;The number of distinct services with a pre-built OAuth flow out of the box&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compliance&lt;/td&gt;
&lt;td&gt;Regulated customers rule out vendors that lack the certifications their own audits require&lt;/td&gt;
&lt;td&gt;SOC 2 Type II, HIPAA, and GDPR where needed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For more details, see our &lt;a href="https://nango.dev/blog/guide-to-secure-ai-agent-api-authentication" rel="noopener noreferrer"&gt;guide to secure AI agent API authentication&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best token vaults and credential management tools for AI agents
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Nango
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nango enables AI agents to connect to &lt;a href="https://nango.dev/api-integrations" rel="noopener noreferrer"&gt;900+ APIs and 6,000+ pre-built tool calls&lt;/a&gt;, with managed authentication and credential storage. Nango’s built-in token vault stores each credential, automatically refreshes it, and injects it when a call is made, thereby isolating it from the model. Webhooks notify your product when a connection needs reauthorization, and your backend can access stored tokens through the API or SDK when needed.&lt;/p&gt;

&lt;p&gt;Hundreds of &lt;a href="https://nango.dev/customers?category=ai-agents" rel="noopener noreferrer"&gt;AI companies&lt;/a&gt; run Nango in production.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7qxj6zwjzxfnxg7jj0ad.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7qxj6zwjzxfnxg7jj0ad.png" alt="Nango connection detail showing a stored, masked access token scoped to an end user" width="800" height="592"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams securing authentication for AI agent integrations across many credential types, with a comprehensive and extensible API catalog and pre-built tools for agents. It also fits teams that need compliance, full audit logs, white-label authorization, or deployment in their own cloud and region.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Broad credential support:&lt;/strong&gt; OAuth 2.0 and 1.0a, API keys, basic auth, custom auth, and MCP Auth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full credential lifecycle:&lt;/strong&gt; Automatic refresh, central rotation and revocation, encryption at rest, standards support (OAuth 2.0 and MCP Auth), and server-side injection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;White-label, no lock-in:&lt;/strong&gt; Users authorize under your brand, and you have full access to the tokens when needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identity scoping and audit trail:&lt;/strong&gt; Scope each credential to a user, org, workspace, or bot with &lt;a href="https://nango.dev/blog/launching-rbac-and-our-commitment-to-the-enterprise/" rel="noopener noreferrer"&gt;RBAC&lt;/a&gt;, and &lt;a href="https://nango.dev/docs/guides/platform/observability" rel="noopener noreferrer"&gt;log&lt;/a&gt; every credential use at request level, exportable over OpenTelemetry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wide API coverage and tool calls:&lt;/strong&gt; &lt;a href="https://nango.dev/api-integrations" rel="noopener noreferrer"&gt;900+ APIs and 6,000+ pre-built tool calls&lt;/a&gt;, and the &lt;a href="https://nango.dev/blog/nango-api-integrations-builder-skill" rel="noopener noreferrer"&gt;Nango builder skill&lt;/a&gt; lets Claude Code, Cursor, or Codex build and test whatever the catalog does not cover.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BYOC or self-host:&lt;/strong&gt; Run Nango in your own cloud and region to control the data residency of your credentials. Enterprise self-hosting runs at &lt;a href="https://nango.dev/blog/best-self-hosted-api-integration-platforms-for-ai-agents/" rel="noopener noreferrer"&gt;feature parity&lt;/a&gt; with the managed cloud.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open source:&lt;/strong&gt; Nango is &lt;a href="https://github.com/NangoHQ/nango" rel="noopener noreferrer"&gt;open source on GitHub&lt;/a&gt;, so you can extend, audit, or self-host it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliant:&lt;/strong&gt; SOC 2 Type II, HIPAA with a BAA, and GDPR, with evidence in the &lt;a href="https://trust.nango.dev" rel="noopener noreferrer"&gt;trust center&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;More than a token vault:&lt;/strong&gt; Beyond API authentication and credential management, Nango lets agents make authenticated API calls across 900+ APIs through its proxy, run data syncs for RAG, and run tool calls. If you only want a credential store, a dedicated vault is simpler.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Auth0
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Auth0 is primarily an identity platform that manages how users log in and prove who they are. Auth0 for AI Agents provides an authorization layer for securely managing third-party tokens.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs2ngtiqxrm8truw4d1dh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs2ngtiqxrm8truw4d1dh.png" alt="Auth0 application Advanced Settings with Token Vault enabled among the grant types" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams whose main need is identity, want an OAuth-only token store alongside it, and will build and run the API calls themselves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Machine authentication:&lt;/strong&gt; Client secret, private key JWT, and mTLS for the agent-to-vault connection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;White-label authorization:&lt;/strong&gt; Users authorize on your custom domain and brand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliant:&lt;/strong&gt; SOC 2 Type II, HIPAA with a BAA, GDPR, and ISO 27001.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Token returned to your app:&lt;/strong&gt; The refresh token stays in the vault, but the exchange hands the provider’s access token to your application, so keeping it out of the model’s reach is left to you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Few pre-built connections:&lt;/strong&gt; 30+ pre-built connections, by Auth0’s own count.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OAuth only:&lt;/strong&gt; OAuth 2.0 tokens only. No API keys, basic auth, or custom schemes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Closed source and cloud only:&lt;/strong&gt; Multi-tenant or dedicated single-tenant cloud, both operated by Auth0. No self-hosting, no deployment in your own cloud account, and no way to audit the code that stores your tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No token export:&lt;/strong&gt; There is no API for exporting stored tokens, so leaving means every user has to reauthorize every API.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Arcade
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Arcade is an MCP-native tool-calling runtime for AI agents, built around per-user authorization. When an agent calls a tool, Arcade runs it as the user who connected the account and injects that user’s credentials at execution. Both the credential store and the runtime that executes the call run on Arcade’s managed platform.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8q6opzkwmha9ql67rudw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8q6opzkwmha9ql67rudw.png" alt="Arcade audit log dashboard listing administrative events only, with no tool executions" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams building chat-style agents that call tools as a specific user, where per-user OAuth is the main challenge and they do not need data syncs, provider webhooks, or an audit trail of tool calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Every baseline met:&lt;/strong&gt; Automatic refresh, rotation and revocation, encryption at rest, standards support (OAuth 2.0 and MCP), and server-side injection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-hostable:&lt;/strong&gt; Available on the Enterprise plan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple credential types:&lt;/strong&gt; OAuth 2.0 tokens, API keys, and secrets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Arcade-branded auth:&lt;/strong&gt; Users see Arcade on the auth screen.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw0q50rqnl2w2e6qbju6l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw0q50rqnl2w2e6qbju6l.png" alt="Arcade-branded authorization screen" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Proprietary credential engine:&lt;/strong&gt; The credential engine is closed source.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No credential-use audit log:&lt;/strong&gt; The audit log covers administrative actions only, not tool executions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thin compliance evidence:&lt;/strong&gt; Only SOC 2 Type II is documented.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a fuller comparison, see &lt;a href="https://nango.dev/blog/arcade-dev-vs-nango" rel="noopener noreferrer"&gt;Arcade.dev vs Nango&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Composio
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Composio is a hosted platform that lets AI agents call third-party tools on behalf of a user. Each user connects their own accounts, and Composio stores those tokens, refreshes them, and injects the right token when a tool runs. Agents reach the tools through its SDKs or MCP, on a managed, closed runtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In May 2026, Composio disclosed a security incident. An attacker compromised the Gmail OAuth tokens of Composio employees and used them to access internal systems. Around 5,001 user connections and 5,241 API keys were compromised or likely exposed. Composio revoked user access tokens and required every customer to rotate their API keys.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Forsvc67hdak9x3qythjt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Forsvc67hdak9x3qythjt.png" alt="Composio security incident notice" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams integrating internal company automations or personal AI agents such as Hermes, Claude, and Codex with APIs. It can also fit customer-facing products where a closed credential runtime and the May 2026 breach can pass a security review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Credential management:&lt;/strong&gt; Automatic refresh, rotation, revocation, and encryption at rest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple auth types:&lt;/strong&gt; OAuth 2.0 and 1.0, API keys, and Basic auth.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Composio-branded auth:&lt;/strong&gt; Users see Composio on the consent screen.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb2el00i55ec6wu8ccl75.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb2el00i55ec6wu8ccl75.png" alt="Composio-branded authorization screen" width="799" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Closed-source backend:&lt;/strong&gt; The credentials layer is closed source.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No standardized log export:&lt;/strong&gt; There is no SIEM or OpenTelemetry export.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a direct comparison, see &lt;a href="https://nango.dev/blog/composio-vs-nango" rel="noopener noreferrer"&gt;Composio vs Nango&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison of solutions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Differentiating criteria compared
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Nango&lt;/th&gt;
&lt;th&gt;Auth0&lt;/th&gt;
&lt;th&gt;Arcade&lt;/th&gt;
&lt;th&gt;Composio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Deployment&lt;/td&gt;
&lt;td&gt;Cloud, BYOC, self-host (free + Enterprise)&lt;/td&gt;
&lt;td&gt;Cloud&lt;/td&gt;
&lt;td&gt;Cloud, self-host (Enterprise)&lt;/td&gt;
&lt;td&gt;Cloud, self-host (Enterprise)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ownership and portability&lt;/td&gt;
&lt;td&gt;White-label, token access&lt;/td&gt;
&lt;td&gt;White-label, no export&lt;/td&gt;
&lt;td&gt;White-label through your own OAuth app, no export&lt;/td&gt;
&lt;td&gt;White-label through your own OAuth app, export&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open source&lt;/td&gt;
&lt;td&gt;Full platform (ELv2)&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Tool SDK only&lt;/td&gt;
&lt;td&gt;SDKs and CLI only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Credential types&lt;/td&gt;
&lt;td&gt;OAuth 2.0/1.0a, API key, Basic, custom, MCP Auth&lt;/td&gt;
&lt;td&gt;OAuth 2.0&lt;/td&gt;
&lt;td&gt;OAuth 2.0, API key, secrets&lt;/td&gt;
&lt;td&gt;OAuth 2.0/1.0, API key, Basic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identity scoping&lt;/td&gt;
&lt;td&gt;Per-user, org, workspace, bot&lt;/td&gt;
&lt;td&gt;Per-user, org isolation&lt;/td&gt;
&lt;td&gt;Per-user, bot through secrets&lt;/td&gt;
&lt;td&gt;Per-user, shared through ACL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authentication methods&lt;/td&gt;
&lt;td&gt;Static API key&lt;/td&gt;
&lt;td&gt;Client secret, private key JWT, mTLS&lt;/td&gt;
&lt;td&gt;Static API key&lt;/td&gt;
&lt;td&gt;Static API key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audit of credential use&lt;/td&gt;
&lt;td&gt;Request-level logs, OTel export&lt;/td&gt;
&lt;td&gt;Tenant logs, SIEM export&lt;/td&gt;
&lt;td&gt;Admin actions only, no export&lt;/td&gt;
&lt;td&gt;Tool-call logs, no standard export&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Connection health notifications&lt;/td&gt;
&lt;td&gt;Webhooks for creation, re-auth, refresh failure&lt;/td&gt;
&lt;td&gt;None, errors at token exchange&lt;/td&gt;
&lt;td&gt;None documented&lt;/td&gt;
&lt;td&gt;Webhook on connection expiry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Service breadth&lt;/td&gt;
&lt;td&gt;900+ APIs&lt;/td&gt;
&lt;td&gt;30+ APIs&lt;/td&gt;
&lt;td&gt;80+ APIs&lt;/td&gt;
&lt;td&gt;1,000+ APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compliance&lt;/td&gt;
&lt;td&gt;SOC 2 II, HIPAA, GDPR&lt;/td&gt;
&lt;td&gt;SOC 2 II, HIPAA, GDPR, ISO 27001&lt;/td&gt;
&lt;td&gt;SOC 2 II&lt;/td&gt;
&lt;td&gt;SOC 2 II, ISO 27001&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Baseline criteria compared
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Nango&lt;/th&gt;
&lt;th&gt;Auth0&lt;/th&gt;
&lt;th&gt;Arcade&lt;/th&gt;
&lt;th&gt;Composio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Automatic OAuth refresh&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rotation and revocation&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Encryption and isolation&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Credential never leaves the vault&lt;/td&gt;
&lt;td&gt;Yes, injected server-side&lt;/td&gt;
&lt;td&gt;No, short-lived token to your app&lt;/td&gt;
&lt;td&gt;Yes, injected server-side&lt;/td&gt;
&lt;td&gt;Yes, injected server-side&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standards support&lt;/td&gt;
&lt;td&gt;OAuth 2.0/1.0a, MCP&lt;/td&gt;
&lt;td&gt;OAuth 2.0/2.1, OIDC, MCP&lt;/td&gt;
&lt;td&gt;OAuth 2.0, MCP&lt;/td&gt;
&lt;td&gt;OAuth 2.0/1.0, MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  How we applied the criteria
&lt;/h3&gt;

&lt;p&gt;We tried every product hands-on and verified claims against each vendor’s documentation, security pages, changelogs, and public repositories. We treated documentation as authoritative where it disagreed with marketing.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ: token vaults for AI agents
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the best token vault for AI agents?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nango. It handles every credential type across 900+ APIs, not OAuth alone, on a runtime that is open source and self-hostable. It is SOC 2 Type II, HIPAA, and GDPR compliant, and you have full access to your users’ tokens when needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do AI agents store OAuth tokens securely?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An OAuth token vault holds the token instead of the agent. It runs the OAuth flow, stores the token encrypted at rest, refreshes it, and injects it when a call is made, so the model never sees it. See &lt;a href="https://nango.dev/blog/api-auth-is-deep" rel="noopener noreferrer"&gt;API auth is deeper than it looks&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is a token vault different from a secrets manager?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Secrets management for AI agents needs more than a static store. A secrets manager, such as HashiCorp Vault or AWS Secrets Manager, stores a string and returns it on request. A token vault also runs the OAuth flow, refreshes tokens, tracks which token belongs to which user, and logs credential use. A plain secret store leaves all of that for you to build.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What credential types do AI agents need beyond OAuth?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Many APIs do not use OAuth. Services such as Stripe, SendGrid, and most analytics tools use API keys. Others use Basic auth (a username and password pair) or custom auth (a scheme with no standard grant, such as a session token from a login endpoint, a signed request, or a JWT assertion). Each custom scheme needs its own refresh logic, which the vault has to own. An OAuth-only vault, such as Auth0, leaves these methods to your application. Nango covers OAuth, API keys, Basic auth, custom auth, and MCP Auth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can a prompt injection make an agent leak its credentials?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When a token vault is used, the model sees only tool inputs and outputs, not the token, which is injected server-side. A hidden injection, such as instructions buried in a parsed PDF, cannot leak a secret the model does not hold. See &lt;a href="https://nango.dev/blog/api-auth-is-deep" rel="noopener noreferrer"&gt;API auth is deeper than it looks&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Choosing a token vault affects data residency, portability, the APIs you can support, and how you audit access. For agents that work with APIs, look beyond credential management and evaluate the complete integrations layer. Open-source, self-hostable, code-based tools give you more flexibility as the space evolves.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-ai-agent-authentication" rel="noopener noreferrer"&gt;Best AI agent authentication platforms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/guide-to-secure-ai-agent-api-authentication" rel="noopener noreferrer"&gt;A complete guide to securing AI agent API authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/id-jag-agent-authentication" rel="noopener noreferrer"&gt;How ID-JAG helps AI agents authenticate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/concurrency-with-oauth-token-refreshes" rel="noopener noreferrer"&gt;How to handle concurrency with OAuth token refreshes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/user-level-vs-org-level-auth-api-integrations" rel="noopener noreferrer"&gt;User-level vs org-level auth in API integrations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>mcp</category>
      <category>agents</category>
      <category>ai</category>
    </item>
    <item>
      <title>Best tools to integrate external APIs with AI coding agents in 2026</title>
      <dc:creator>Sapnesh Naik</dc:creator>
      <pubDate>Thu, 23 Jul 2026 02:40:38 +0000</pubDate>
      <link>https://dev.to/nangohq/best-tools-to-integrate-external-apis-with-ai-coding-agents-in-2026-14op</link>
      <guid>https://dev.to/nangohq/best-tools-to-integrate-external-apis-with-ai-coding-agents-in-2026-14op</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Coding agents like Claude Code, Cursor, and Codex write integration code well but ship broken API integrations on their own: they work from stale training data, invent endpoints, and have no way to run OAuth or test against the real API. You can fix that by configuring a set of supporting tools: docs-context MCP servers, agent skills, auth and testing utilities, and an integration platform that gives the agent real connections to build against.&lt;/p&gt;

&lt;p&gt;We build API integrations with coding agents every day at Nango, and this list is the toolbox that makes that work. The focus is customer-facing API integrations, where your users connect their own Salesforce, HubSpot, or Slack accounts to your product, not editor productivity plugins. Every entry is something you configure for the agent, and they work together in one workflow.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it gives the agent&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;th&gt;Pricing and license&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Nango&lt;/td&gt;
&lt;td&gt;Managed auth, real-API testing, and a runtime across 900+ APIs, via skills for all coding agents&lt;/td&gt;
&lt;td&gt;Building production integrations end to end&lt;/td&gt;
&lt;td&gt;Free tier, paid from $50/mo; source-available (ELv2)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context7&lt;/td&gt;
&lt;td&gt;Up-to-date library and SDK docs in the prompt&lt;/td&gt;
&lt;td&gt;Stopping stale-docs hallucinations&lt;/td&gt;
&lt;td&gt;Free 1,000 calls/mo, Pro $10/seat/mo; MIT server, closed backend&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Official provider MCP servers (GitHub, Atlassian, AWS)&lt;/td&gt;
&lt;td&gt;Build-time operations on the provider: repos, issues, docs, infra&lt;/td&gt;
&lt;td&gt;Working with providers you already use&lt;/td&gt;
&lt;td&gt;Free; MIT / Apache 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent skills and the skills CLI&lt;/td&gt;
&lt;td&gt;Procedural knowledge: how to build an integration, step by step&lt;/td&gt;
&lt;td&gt;Encoding repeatable workflows across agents&lt;/td&gt;
&lt;td&gt;Free; open standard (agentskills.io)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apidog MCP server&lt;/td&gt;
&lt;td&gt;Your OpenAPI spec served as agent context&lt;/td&gt;
&lt;td&gt;Generating code against a known API contract&lt;/td&gt;
&lt;td&gt;Free; open source&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speakeasy Gram&lt;/td&gt;
&lt;td&gt;Turns an OpenAPI spec into hosted MCP tools&lt;/td&gt;
&lt;td&gt;API producers exposing their own API to agents&lt;/td&gt;
&lt;td&gt;Free tier (1,000 tool calls); open source&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RedirectMeTo, ngrok, mkcert&lt;/td&gt;
&lt;td&gt;Working OAuth redirects on localhost&lt;/td&gt;
&lt;td&gt;Testing OAuth flows during development&lt;/td&gt;
&lt;td&gt;Free tiers; MIT / BSD&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What it takes for a coding agent to ship an API integration
&lt;/h2&gt;

&lt;p&gt;Prompting an agent to “build a HubSpot integration” fails without scaffolding, and the failure points are predictable. A production API integration needs four things that the agent does not have out of the box:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Current API knowledge:&lt;/strong&gt; Models work from training data that lags the real API. In a 2025 benchmark of LLMs on web API integration tasks, models &lt;a href="https://arxiv.org/abs/2509.20172" rel="noopener noreferrer"&gt;hallucinated endpoint URLs up to 39% of the time and parameter names up to 31% of the time&lt;/a&gt;. Docs-context tools close this gap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth and credentials:&lt;/strong&gt; The agent cannot click through an OAuth consent screen, register an OAuth app, or store and refresh tokens. Someone has to hand it an authorized connection, and &lt;a href="https://nango.dev/blog/why-is-oauth-still-hard" rel="noopener noreferrer"&gt;OAuth is full of provider-specific quirks&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A test loop against the real API:&lt;/strong&gt; Code that compiles is not an integration that works. The agent needs to execute its code against a real connection, read the actual response or error, and iterate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A runtime and maintenance path:&lt;/strong&gt; Token refresh, webhooks, retries, pagination, rate limits, and observability have to live somewhere after the agent is done writing code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffajh0pr89kqrr6nretns.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffajh0pr89kqrr6nretns.png" alt="The coding agent toolbox for API integrations: docs context (Context7, Apidog MCP), agent skills, provider MCP servers (GitHub, Atlassian, AWS), and Nango managed auth load into the coding agent's build loop of research, write, test against a real connection with nango dryrun, and deploy, which ships to the Nango runtime whose MCP server and REST tool calls serve your product and its AI agents" width="799" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The seven tools below cover those four jobs. Most are complementary: a real setup uses three or four of them together, and the usage example at the end shows the full workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Nango
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://nango.dev" rel="noopener noreferrer"&gt;Nango&lt;/a&gt; is the integration platform where coding agents build API integrations. Your agent writes integrations as code functions, tests them against real connections, and deploys them to a managed runtime that handles auth, syncs, webhooks, and tool calls across &lt;a href="https://nango.dev/api-integrations" rel="noopener noreferrer"&gt;900+ APIs&lt;/a&gt; with 5,000+ reusable templates.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; free tier (10 connections included), paid from $50/month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License:&lt;/strong&gt; source-available (Elastic License 2.0), self-hostable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works with:&lt;/strong&gt; All coding agents, including Claude Code, Cursor, Codex, Gemini CLI, and OpenCode&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install:&lt;/strong&gt; &lt;code&gt;npx skills add NangoHQ/skills -s building-nango-functions-locally&lt;/code&gt; for repo-based builds; a remote Function Builder skill builds with no local project. The &lt;a href="https://nango.dev/docs/getting-started/coding-agent-setup" rel="noopener noreferrer"&gt;coding agent setup guide&lt;/a&gt; explains which fits your use case.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams whose coding agent should ship the whole integration: research the API, write the code, test it against a real connection, and deploy it to a runtime their product consumes through an MCP server or REST.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One skill covers the full build loop:&lt;/strong&gt; The &lt;a href="https://nango.dev/docs/guides/functions/functions-guide" rel="noopener noreferrer"&gt;Nango skill&lt;/a&gt; gives the agent the integration patterns (auth, actions, syncs, webhooks) plus a test command. &lt;code&gt;nango dryrun&lt;/code&gt; executes generated code against a real connection, so the agent iterates on real API responses instead of guessing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmgi3aosyu0u43vkvc0f.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmgi3aosyu0u43vkvc0f.gif" alt="Claude Code building a Google Calendar action with the Nango skill" width="600" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Managed auth the agent cannot build:&lt;/strong&gt; A drop-in UI handles OAuth, API keys, JWT, basic auth, and &lt;a href="https://nango.dev/docs/guides/auth/mcp-auth" rel="noopener noreferrer"&gt;MCP Auth&lt;/a&gt; across 900+ APIs. Your users authorize under your brand, and the agent only ever sees a connection ID.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs built for agents:&lt;/strong&gt; A public &lt;a href="https://nango.dev/docs/getting-started/coding-agent-setup" rel="noopener noreferrer"&gt;docs MCP server&lt;/a&gt;, &lt;a href="https://nango.dev/docs/llms.txt" rel="noopener noreferrer"&gt;&lt;code&gt;llms.txt&lt;/code&gt;&lt;/a&gt;, and an agent-readable API catalog, so the agent grounds itself without scraping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrations built from a prompt alone:&lt;/strong&gt; The remote function builder (shipped June 1, 2026) compiles, dry-runs, and deploys over REST with no local project. This is what enables &lt;a href="https://nango.dev/blog/just-in-time-integrations" rel="noopener noreferrer"&gt;just-in-time integrations&lt;/a&gt;, where an agent inside your product builds an integration that a customer asked for.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The runtime is included:&lt;/strong&gt; The deployed integration runs on a tenant-isolated runtime with data syncs, webhook ingestion, &lt;a href="https://nango.dev/docs/guides/platform/observability" rel="noopener noreferrer"&gt;full request and response logs, and OpenTelemetry export&lt;/a&gt;. Your product’s agents consume it through a hosted MCP server with schema-validated tools, or REST.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Needs a Nango account:&lt;/strong&gt; The free tier is enough to build and test, but the workflow assumes the Nango platform end to end.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built for developers:&lt;/strong&gt; Integrations are code in a repo. Teams that want a drag-and-drop builder are better served by a visual embedded iPaaS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Context7
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/upstash/context7" rel="noopener noreferrer"&gt;Context7&lt;/a&gt;, by Upstash, is the most widely used docs-context MCP server. It resolves a library name to an indexed ID, then injects current, version-specific documentation and code examples into the agent’s prompt. It is mainly used to stop the agent from hallucinating deprecated or nonexistent library APIs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; free (1,000 calls/month), Pro $10/seat/month for 5,000 calls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License:&lt;/strong&gt; MIT (MCP server); the crawling backend is closed source&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works with:&lt;/strong&gt; Claude Code, Cursor, Codex, and most MCP clients, as an MCP server or a skill&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install:&lt;/strong&gt; &lt;code&gt;npx ctx7 setup&lt;/code&gt;, or the remote server at &lt;code&gt;mcp.context7.com/mcp&lt;/code&gt; with an API key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg8fz8y3bos7oligyc6mj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg8fz8y3bos7oligyc6mj.png" alt="Context7's library index serving up-to-date docs for AI agents, with Nango's GitHub repo and docs among the indexed sources and the npx ctx7 setup install command" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Any agent writing code against SDKs and libraries that change faster than model training data: Next.js, Stripe, Supabase, provider SDKs, and similar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Solves the stale-docs problem for LLMs:&lt;/strong&gt; Version-specific docs arrive in the prompt at generation time. Community endorsement is unusually strong; a typical &lt;a href="https://news.ycombinator.com/item?id=44889785" rel="noopener noreferrer"&gt;Hacker News assessment&lt;/a&gt; called it “so good it seems like magic.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low setup cost:&lt;/strong&gt; One command installs it across your agents, and it stays out of the way until the agent queries a library.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Indexing lags bleeding-edge releases:&lt;/strong&gt; Users report the indexed docs trail brand-new versions by days, which is exactly when you need them most.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The free tier shrank:&lt;/strong&gt; In January 2026, the free allowance dropped to 1,000 calls per month (from roughly 6,000), so using it across a team effectively requires the paid tier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A hosted dependency with a security history:&lt;/strong&gt; Every query routes through Upstash. In March 2026, researchers disclosed &lt;a href="https://noma.security/blog/contextcrush-context7-the-mcp-server-vulnerability/" rel="noopener noreferrer"&gt;ContextCrush&lt;/a&gt;, a prompt-injection vulnerability where unsanitized library “Custom Rules” reached every querying agent. Upstash patched it within days, but docs-context servers are part of your supply chain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If Context7 does not fit, &lt;a href="https://github.com/ref-tools/ref-tools-mcp" rel="noopener noreferrer"&gt;Ref.tools&lt;/a&gt; optimizes for token-efficient docs search, and &lt;a href="https://docs.devin.ai/work-with-devin/deepwiki-mcp" rel="noopener noreferrer"&gt;DeepWiki MCP&lt;/a&gt; (by Cognition) answers questions over 50,000+ pre-indexed public GitHub repos for free.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Official provider MCP servers (GitHub, Atlassian, AWS)
&lt;/h2&gt;

&lt;p&gt;When the provider you are integrating with ships an official MCP server, your agent can operate that provider directly while it builds: read API docs, inspect repos, file issues, provision infrastructure. Three matter most in 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/github/github-mcp-server" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub MCP server&lt;/strong&gt;&lt;/a&gt;: MIT-licensed, remote server GA since September 4, 2025 with OAuth 2.1, plus a local Docker option. 50+ tools across 23 toolsets covering repos, issues, pull requests, and actions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atlassian Rovo MCP server:&lt;/strong&gt; GA since February 4, 2026, hosted at &lt;code&gt;mcp.atlassian.com&lt;/code&gt;. Exposes Jira, Confluence, and Bitbucket Cloud with tool groups that respect existing user permissions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS MCP servers:&lt;/strong&gt; The &lt;a href="https://github.com/awslabs/mcp" rel="noopener noreferrer"&gt;awslabs suite&lt;/a&gt; has 40+ Apache 2.0 servers (documentation, CDK, cost analysis), and the managed AWS MCP Server (GA May 6, 2026) exposes 15,000+ AWS API operations through a small fixed toolset, free.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Build-time operations on providers your team already uses: the agent researches the API, checks examples, manages the repo and tickets, and provisions the infrastructure the integration will run on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Maintained by the provider:&lt;/strong&gt; Official servers track API changes, and auth is first-party OAuth rather than a scraped token in a config file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool-context discipline is improving:&lt;/strong&gt; GitHub cut its default toolset from 101 tools to 52 in October 2025, and a January 28, 2026 update added OAuth scope filtering plus dynamic toolsets that start with 4 tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Context cost is still real:&lt;/strong&gt; One user &lt;a href="https://github.com/github/github-mcp-server/issues/1286" rel="noopener noreferrer"&gt;measured Claude Code’s context jumping from 34,000 to 80,000 tokens just from enabling the GitHub MCP server. Enable the minimal toolsets you need.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;They authenticate you, not your customers:&lt;/strong&gt; These servers run on the developer’s own OAuth token or PAT. They are build-time tools. None of them handles multi-tenant end-user auth, token refresh, or per-customer API calls in your shipped product.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your product needs official MCP servers at runtime, Nango covers that side too: its catalog includes MCP-type integrations like HubSpot MCP, &lt;a href="https://nango.dev/docs/guides/auth/mcp-auth" rel="noopener noreferrer"&gt;MCP Auth&lt;/a&gt; manages your users’ connections to them, and a generic MCP integration connects any spec-compliant server, all through the same auth and runtime as regular API integrations.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Agent skills and the skills CLI
&lt;/h2&gt;

&lt;p&gt;A skill is a folder with a &lt;code&gt;SKILL.md&lt;/code&gt; file that teaches an agent a workflow: instructions, scripts, and references it loads when relevant. Anthropic &lt;a href="https://www.anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills" rel="noopener noreferrer"&gt;introduced Agent Skills&lt;/a&gt; on October 16, 2025 and published the format as an open standard on December 18, 2025 at &lt;a href="https://agentskills.io" rel="noopener noreferrer"&gt;agentskills.io&lt;/a&gt;. OpenAI added skills to Codex in December 2025, and the standard’s client list spans 40+ products, including Cursor and Gemini CLI.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; free&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License:&lt;/strong&gt; open standard; individual skills carry their own licenses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works with:&lt;/strong&gt; 40+ agents and clients via one &lt;code&gt;SKILL.md&lt;/code&gt; format&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install:&lt;/strong&gt; &lt;code&gt;npx skills add &amp;lt;owner/repo&amp;gt;&lt;/code&gt; (the &lt;a href="https://vercel.com/changelog/introducing-skills-the-open-agent-skills-ecosystem" rel="noopener noreferrer"&gt;skills CLI&lt;/a&gt; by Vercel, announced January 20, 2026)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Encoding the procedure of integration work once, so every agent on the team follows it: which auth pattern to use, how to paginate, how to test.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One artifact, every agent:&lt;/strong&gt; The same skill works in Claude Code, Codex, and Cursor, so the workflow does not depend on which agent a teammate runs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cheap on context:&lt;/strong&gt; Skills load progressively; Codex budgets around 2% of the context window for the skills list. Hence the community rule of thumb: skills for defined workflows, MCP for live data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Good API-integration skills exist:&lt;/strong&gt; Anthropic’s &lt;a href="https://github.com/anthropics/skills" rel="noopener noreferrer"&gt;mcp-builder&lt;/a&gt; scaffolds an MCP server that wraps an API in TypeScript or Python. Nango’s skills (covered above) go further and produce a deployed, tested integration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Quality varies wildly:&lt;/strong&gt; The skills.sh registry tracks installs, not correctness, and anyone can publish.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A skill alone still guesses:&lt;/strong&gt; Instructions without a real-API test loop do not fix the hallucinated-endpoint problem. With mcp-builder, for example, you still host, auth, and maintain the resulting server yourself.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Apidog MCP server
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://docs.apidog.com/conntect-api-specification-within-apidog-project-to-ai-via-apidog-mcp-server-901476m0" rel="noopener noreferrer"&gt;Apidog MCP server&lt;/a&gt; feeds an API specification to your coding agent: an Apidog project, a published docs site, or any plain OpenAPI/Swagger file. The agent then generates requests and types against the actual contract instead of its memory of it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; free (the Apidog platform has a free plan for up to 4 users)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License:&lt;/strong&gt; open source (MIT)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works with:&lt;/strong&gt; Cursor, Claude Code, VS Code, and other MCP clients&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install:&lt;/strong&gt; &lt;code&gt;npx apidog-mcp-server@latest&lt;/code&gt; with a spec path or project token&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs2pdehhmu6ve6sr9c3f9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs2pdehhmu6ve6sr9c3f9.png" alt="Apidog MCP Server documentation: it serves your API specification to AI-powered IDEs like Cursor so the agent codes against the real contract" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams that have (or can obtain) an OpenAPI spec for the API they are integrating: internal services, partner APIs, or well-documented public providers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Grounds generation in the real contract:&lt;/strong&gt; Field names, required parameters, and response shapes come from the spec, which removes the most common class of integration bugs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works with bare OpenAPI files:&lt;/strong&gt; You do not need to adopt the Apidog platform; pointing it at a local or remote spec file is enough.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Only as good as the spec:&lt;/strong&gt; Long-tail SaaS APIs often publish incomplete or outdated OpenAPI files, and many publish none.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No execution layer:&lt;/strong&gt; The agent knows the contract but still cannot authenticate or verify behavior against the live API.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Speakeasy Gram
&lt;/h2&gt;

&lt;p&gt;Gram, by Speakeasy, turns an OpenAPI document into a hosted MCP server with curated toolsets. It sits on the producer side of the ecosystem: if you want your own API to be callable by ChatGPT, Claude, and coding agents, Gram is the fastest path.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; free tier with 1,000 tool calls, then usage-based&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License:&lt;/strong&gt; open source, with a hosted service&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works with:&lt;/strong&gt; any MCP client&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install:&lt;/strong&gt; upload an OpenAPI spec, curate the toolset, get a hosted MCP URL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr295asearu5izmfccfzw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr295asearu5izmfccfzw.png" alt="Speakeasy's homepage positioning its enterprise control plane for AI: managing MCPs, skills, and assistants with permissions and observability" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;API producers who want a maintained, hosted MCP server for their own API without building one by hand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Spec in, hosted MCP server out:&lt;/strong&gt; Upload an OpenAPI document and Gram hosts the resulting server, so you skip building and operating one yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Curation is first-class:&lt;/strong&gt; Toolset curation and enriched descriptions are part of the workflow. Speakeasy’s own guidance notes that naive one-tool-per-endpoint conversion underperforms small, curated toolsets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The consumer side stays unsolved:&lt;/strong&gt; Generating an MCP server for an API you consume still leaves auth, multi-tenant credentials, and maintenance with you. For consuming many external APIs, an integration platform is the broader tool.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. RedirectMeTo, ngrok, and mkcert (OAuth on localhost)
&lt;/h2&gt;

&lt;p&gt;Many providers reject &lt;code&gt;http://localhost&lt;/code&gt; OAuth redirect URLs (Slack, TikTok, and Microsoft OneDrive among them), which blocks the agent’s test loop before it starts. Three utilities fix it, and we cover them in depth in &lt;a href="https://nango.dev/blog/oauth-redirects-on-localhost-with-https" rel="noopener noreferrer"&gt;3 easy ways to do OAuth redirects on localhost&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; RedirectMeTo is free; ngrok has a free tier, then $8/month (Hobbyist, billed annually); mkcert is free&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;License:&lt;/strong&gt; MIT (RedirectMeTo), proprietary (ngrok), BSD-3-Clause (mkcert)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Works with:&lt;/strong&gt; any OAuth provider and any local stack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Developing and testing OAuth flows locally, so the agent (and you) can complete a real authorization against a real provider during development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;RedirectMeTo is zero-setup:&lt;/strong&gt; Prepend &lt;code&gt;https://redirectmeto.com/&lt;/code&gt; to your localhost callback URL and register that as the redirect URL. It forwards the redirect with query parameters intact.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ngrok gives you a stable HTTPS tunnel:&lt;/strong&gt; Every free account includes one static dev domain, which doubles as a webhook receiver while you test event-driven integrations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mkcert makes **`&lt;/strong&gt;&lt;a href="https://localhost**%60%7B%" rel="noopener noreferrer"&gt;https://localhost**`{%&lt;/a&gt; endraw %}** real:** It installs a local CA and mints trusted certificates, no cloud dependency involved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trust and limits:&lt;/strong&gt; A redirect service can see your authorization code in transit, ngrok’s free tier has an interstitial page and tight quotas, and mkcert’s last release was April 2022 (it still works, but it is in maintenance mode).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This solves redirects only:&lt;/strong&gt; Token storage, refresh, and multi-tenant auth remain yours. With a managed auth layer you skip the problem, since the redirect URL is the platform’s hosted HTTPS endpoint.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Usage example: building a HubSpot sync with Claude Code and Nango
&lt;/h2&gt;

&lt;p&gt;Here is how the toolbox works together on a real task: syncing HubSpot contacts into your product.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set up auth once:&lt;/strong&gt; Create a HubSpot integration in the Nango dashboard and add a test connection by completing the OAuth flow. No localhost redirect workarounds needed, because the redirect URL is Nango’s hosted endpoint.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxou4u3k1moderkpjqqr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxou4u3k1moderkpjqqr.gif" alt="Adding a HubSpot test connection from the Nango dashboard via the OAuth flow" width="720" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Give the agent its tools:&lt;/strong&gt; Install the Nango skill ({% raw %}&lt;code&gt;npx skills add NangoHQ/skills -s building-nango-functions-locally&lt;/code&gt;). The skill points the agent at Nango’s docs MCP server, and Context7 covers any SDK questions along the way.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt at the level of intent:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/building-nango-functions-locally Build a Nango sync that fetches all HubSpot
contacts. Backfill the full contact list on first run, then fetch only new and
updated contacts incrementally. Return id, email, first name, last name, and
last modified date.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The agent builds and tests against the real API:&lt;/strong&gt; It researches the HubSpot API, writes the sync with pagination and checkpoints, runs &lt;code&gt;nango dryrun&lt;/code&gt; against your test connection, reads real responses, and iterates until the sync passes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy and consume:&lt;/strong&gt; &lt;code&gt;nango deploy dev&lt;/code&gt; ships the sync to the runtime. Your product reads synced records over REST, your users connect their own HubSpot accounts through the white-label auth UI, and the agent reads execution logs when something needs a fix.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9u89rt6u2jojrtvxmdhz.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9u89rt6u2jojrtvxmdhz.gif" alt="Nango's white-label auth UI for end users authorizing their accounts" width="720" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Docs tools ground the agent, the skill encodes the procedure, and the platform supplies credentials, a test loop, and a runtime. For a deeper walkthrough, see &lt;a href="https://nango.dev/blog/how-to-sync-large-amounts-of-contacts-from-hubspot-api" rel="noopener noreferrer"&gt;how to sync large amounts of contacts from the HubSpot API&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the toolbox small
&lt;/h2&gt;

&lt;p&gt;Every MCP server you add loads its tool definitions into every conversation. Anthropic measured a typical five-server setup at &lt;a href="https://www.anthropic.com/engineering/advanced-tool-use" rel="noopener noreferrer"&gt;around 55,000 tokens of tool definitions&lt;/a&gt; before the conversation starts, and Claude Code added MCP tool search in January 2026 to load definitions on demand instead.&lt;/p&gt;

&lt;p&gt;Two rules of thumb from teams running this in production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Install only what the task needs:&lt;/strong&gt; Three or four tools from this list cover an integration project. Add a docs-context server, the provider’s official MCP server if one exists, one integration skill, and the platform. Skip the rest until a task demands them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat MCP servers as dependencies:&lt;/strong&gt; In September 2025, the &lt;a href="https://www.koi.ai/blog/postmark-mcp-npm-malicious-backdoor-email-theft" rel="noopener noreferrer"&gt;postmark-mcp npm package&lt;/a&gt; shipped an update that BCC’d every email to an attacker. Prefer official servers, pin versions, and keep production credentials out of the agent’s environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Can Claude Code build API integrations?
&lt;/h3&gt;

&lt;p&gt;Yes. Claude Code can build production API integrations when paired with a skill that encodes integration patterns and a way to test against the real API. Without those, models hallucinate endpoint URLs up to &lt;a href="https://arxiv.org/abs/2509.20172" rel="noopener noreferrer"&gt;39% of the time&lt;/a&gt;. With the Nango skill, Claude Code researches the API, writes the integration, tests it against a real connection with &lt;code&gt;nango dryrun&lt;/code&gt;, and deploys it. The same applies to Cursor, Codex, and other agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  What MCP servers do coding agents need to integrate external APIs with your product?
&lt;/h3&gt;

&lt;p&gt;Three kinds: a docs-context server (Context7 or an OpenAPI-spec server like Apidog’s) so the agent stops guessing endpoints, the provider’s official MCP server (GitHub, Atlassian, AWS) for build-time operations, and the integration platform’s server (Nango’s docs MCP server for grounding, and its hosted MCP server for the tools your product’s agents call at runtime). Keep the total small; five servers can cost around 55,000 tokens of context before any work starts.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do AI coding agents handle OAuth?
&lt;/h3&gt;

&lt;p&gt;They don’t, directly: an agent cannot register an OAuth app or click through a consent screen. You either complete the flow yourself during development (with RedirectMeTo or ngrok solving the localhost redirect problem) or use a platform like Nango, where a human authorizes a test connection once and the agent builds and tests against that connection ID. In production, end users authorize through a hosted auth flow, and tokens stay hidden from your agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I give my coding agent a skill or an MCP server?
&lt;/h3&gt;

&lt;p&gt;Use a skill for a defined, repeatable workflow and an MCP server when the agent needs discoverability or live data. Skills load on demand and cost almost nothing in context, while MCP servers front-load their tool definitions into every conversation. For API integration work, the strongest setup is one integration skill plus one or two MCP servers for docs and provider access. For the full comparison of integration skills, see &lt;a href="https://nango.dev/blog/best-api-integration-skills-for-claude-and-codex" rel="noopener noreferrer"&gt;3 best API integration skills for Claude and Codex&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The gap between writing code and shipping API integrations is tooling, and in 2026, the toolbox has settled into clear layers: docs context (Context7, Apidog), procedure (agent skills), build-time provider access (official MCP servers), auth and testing utilities (RedirectMeTo, ngrok), and an integration platform that supplies real connections, a test loop, and a runtime.&lt;/p&gt;

&lt;p&gt;Nango is the only tool that covers the last layer end to end, which is why the rest of the toolbox fits around it: the agent grounds itself with docs tools, follows a skill, and builds on Nango’s auth, testing, and runtime across 900+ APIs. To try the workflow, follow the &lt;a href="https://nango.dev/docs/getting-started/coding-agent-setup" rel="noopener noreferrer"&gt;coding agent setup guide&lt;/a&gt; with your favorite coding agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-api-integration-platforms-claude-code-cursor-codex" rel="noopener noreferrer"&gt;Best API integration platforms to use with Claude Code, Cursor, and Codex (2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-api-integration-skills-for-claude-and-codex" rel="noopener noreferrer"&gt;3 best API integration skills for Claude and Codex in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-mcp-servers-for-agent-api-integrations" rel="noopener noreferrer"&gt;Best MCP servers for agent API integrations in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/using-ai-coding-agents-for-building-api-integrations" rel="noopener noreferrer"&gt;Using AI coding agents for building API integrations in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/oauth-redirects-on-localhost-with-https" rel="noopener noreferrer"&gt;3 easy ways to do OAuth redirects on localhost (with HTTPS)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>claude</category>
      <category>api</category>
      <category>toolcall</category>
      <category>mcp</category>
    </item>
    <item>
      <title>MCP vs tool calls for AI agents: which is better?</title>
      <dc:creator>Sapnesh Naik</dc:creator>
      <pubDate>Wed, 15 Jul 2026 02:12:22 +0000</pubDate>
      <link>https://dev.to/nangohq/mcp-vs-tool-calls-for-ai-agents-which-is-better-16hk</link>
      <guid>https://dev.to/nangohq/mcp-vs-tool-calls-for-ai-agents-which-is-better-16hk</guid>
      <description>&lt;p&gt;If you are building an AI agent in your product that needs third-party API integrations (fetch a customer from Salesforce, send a Slack message, update a deal in HubSpot), you have two ways to give it tools: connect it to MCP (Model Context Protocol) servers, or define custom tool calls (also called function calling).&lt;/p&gt;

&lt;p&gt;The two are not alternatives at the protocol level: MCP is built on top of tool calling. This article explains both, how they differ, and which one to use in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Tool calls (function calling) are the base mechanism: you pass tool schemas to the model, the model picks one and returns arguments, and your code executes the call. You control tool design, auth, and execution, and you build all of it.&lt;/p&gt;

&lt;p&gt;MCP is an open protocol on top of tool calling. It standardizes how agents discover and call tools from servers, so the same server works with agents built on Anthropic, OpenAI, LangChain, or any other stack with an MCP client. Generic third-party MCP servers are fast to wire up, but they cost context, reduce tool-selection accuracy, and add an auth and security surface you do not control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The short answer:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pick custom tool calls&lt;/strong&gt; for the production agent inside your SaaS product. They win on reliability, token cost, and per-user auth. In our fall 2025 survey of several hundred teams building agent integrations, fewer than 10 kept MCP in production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick MCP servers&lt;/strong&gt; for prototypes, internal agents, and developer tooling, where setup speed matters more than per-request cost and your own engineers supervise the agent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use both&lt;/strong&gt; by writing custom tools once and serving them over an MCP server. &lt;a href="https://nango.dev" rel="noopener noreferrer"&gt;Nango&lt;/a&gt; supports this: use coding agents like Claude Code, Cursor, and Codex to build custom tool calls on the platform, and your agent consumes them via REST or Nango’s built-in MCP server.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What are tool calls?
&lt;/h2&gt;

&lt;p&gt;Tool calling is an LLM feature. OpenAI shipped &lt;a href="https://openai.com/index/function-calling-and-other-api-updates/" rel="noopener noreferrer"&gt;function calling&lt;/a&gt; on June 13, 2023, and Anthropic’s &lt;a href="https://www.anthropic.com/news/tool-use-ga" rel="noopener noreferrer"&gt;tool use&lt;/a&gt; reached general availability on May 30, 2024. The mechanics are the same everywhere:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You pass tool definitions (name, description, JSON Schema input) with your request.&lt;/li&gt;
&lt;li&gt;Based on the user’s prompt, the model decides a tool is needed and returns the tool name plus arguments.&lt;/li&gt;
&lt;li&gt;Your code executes the actual API call and returns the result to the model.&lt;/li&gt;
&lt;li&gt;The model uses the result to continue or respond.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A tool has two halves. The first half is the schema the model sees. For a CRM lookup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"get_customer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fetch a customer record from the CRM by email address."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"input_schema"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"object"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"string"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Customer email address"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"required"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second half is the function your code runs when the model calls the tool. The model only emits structured intent (the tool name and arguments as JSON). Nothing happens until your code matches that intent to real logic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Your agent loop routes the model's tool call to code you wrote&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;executeTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;get_customer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getAccessToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;salesforce&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// your auth layer&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;crm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;searchContacts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;           &lt;span class="c1"&gt;// the actual API call&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you use Claude or ChatGPT and tools seem to run automatically, it is because this executor ships inside those apps. When you build an agent in your product, you own the executor. It is where authentication, retries, rate limits, and pagination live.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcdo5x4d5usyy8emiqp63.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcdo5x4d5usyy8emiqp63.jpg" alt="Sequence diagram of a custom tool call: the model picks a tool and your executor code runs the API call with the user's token" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Schema adherence is largely solved: OpenAI’s &lt;a href="https://openai.com/index/introducing-structured-outputs-in-the-api/" rel="noopener noreferrer"&gt;structured outputs&lt;/a&gt; (August 6, 2024) guarantee arguments match your schema, and Anthropic offers the same with &lt;code&gt;strict: true&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is MCP?
&lt;/h2&gt;

&lt;p&gt;MCP is an open protocol that Anthropic &lt;a href="https://www.anthropic.com/news/model-context-protocol" rel="noopener noreferrer"&gt;released on November 25, 2024&lt;/a&gt;. It standardizes how AI applications connect to external tools and data over JSON-RPC. Your agent (the MCP host) connects to MCP servers, which expose tools, resources, and prompts.&lt;/p&gt;

&lt;p&gt;MCP does not replace tool calling. It rides on it. Your agent calls &lt;code&gt;tools/list&lt;/code&gt; on each connected server, receives tool schemas, and passes them to the model as ordinary tool definitions. When the model returns a tool call, the agent forwards it to the server, and the server executes the API request.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqnxfg9taerhszr6ydis7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqnxfg9taerhszr6ydis7.jpg" alt="Sequence diagram of MCP: the agent lists tools from a third-party MCP server, the model picks one, and the server executes the API request" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So the agent still decides which tool to run by emitting structured intent, exactly as with plain tool calls. What changes is who supplies the schemas and who executes the call: the MCP server does both. That makes the real decision one about tool supply: generic tools from a public server someone else operates, or custom tool calls you design for your product.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP vs API: what is the difference?
&lt;/h2&gt;

&lt;p&gt;An API is the interface a service exposes for software to call it. MCP is a protocol that describes those capabilities to an AI agent in a form it can discover and invoke. An MCP server sits between the two: it wraps one or more APIs and presents them to agents as tools. In practice, most MCP servers are API wrappers: a &lt;a href="https://arxiv.org/abs/2507.16044" rel="noopener noreferrer"&gt;July 2025 study of 116 official MCP servers&lt;/a&gt; found 88.6% are backed by REST APIs.&lt;/p&gt;

&lt;p&gt;MCP does not replace APIs. Someone still registers the OAuth app, makes the API requests, and handles errors inside the server. When you compare MCP vs API access for your agent, you are really comparing who wrote and operates that wrapper: a third party (an MCP server) or you (custom tool calls).&lt;/p&gt;

&lt;h2&gt;
  
  
  Using third-party MCP servers in your product’s agent
&lt;/h2&gt;

&lt;p&gt;Connecting a pre-built MCP server to your agent takes minutes. These are the problems you hit once the agent runs inside your product:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tool definitions consume context on every request:&lt;/strong&gt; Every tool the agent can see adds its definition to every model request, and the model reads all of them before picking one. Generic MCP servers ship tools for every endpoint, so two or three connected servers add tens of thousands of tokens to each request before the agent does any work. You pay for that in tokens, and your customers feel it as latency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More tools mean worse tool selection:&lt;/strong&gt; The more tools the model sees, the more likely it picks the wrong one or hallucinates arguments. OpenAI recommends keeping &lt;a href="https://developers.openai.com/api/docs/guides/function-calling" rel="noopener noreferrer"&gt;fewer than 20 tools&lt;/a&gt; available per turn, and Anthropic documents accuracy dropping beyond 30 to 50 tools. From working with several hundred teams that build agent integrations, we see most SaaS agents need around 20 tools, customized to their use case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generic tools are not shaped to your product:&lt;/strong&gt; Most public MCP servers wrap API endpoints one-to-one. Your product might need one tool like &lt;code&gt;onboard_user_to_slack&lt;/code&gt;. With a generic Slack server, the agent instead chains &lt;code&gt;search_user&lt;/code&gt;, &lt;code&gt;create_channel&lt;/code&gt;, &lt;code&gt;invite_user&lt;/code&gt;, and &lt;code&gt;send_message&lt;/code&gt;, and every extra call is a chance to fail in front of a customer. We covered the fix in &lt;a href="https://nango.dev/blog/build-reliable-tool-calls-for-ai-agents-integrating-with-external-apis" rel="noopener noreferrer"&gt;how to build reliable tool calls for AI agents&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzvqff22akowf49fxcptk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzvqff22akowf49fxcptk.png" alt="Before and after comparison of chained generic tool calls vs a single custom upsert tool" width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Per-user auth is rarely supported:&lt;/strong&gt; In your product, each customer connects their own Salesforce or Slack, and every action the agent takes must run with that customer’s token. Public MCP servers are mostly built for one user connecting their own accounts. MCP’s OAuth flow authorizes your agent to the server, and auth to the underlying API is whatever the server operator built. Multi-tenant, per-user auth across your customer base is rarely part of it, so you end up building that layer yourself anyway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You do not control the code that touches customer data:&lt;/strong&gt; The third party hosts the server and executes the tool calls. You cannot review, customize, or patch that code, and your customers’ tokens and records flow through it. In September 2025, the &lt;a href="https://www.koi.ai/blog/postmark-mcp-npm-malicious-backdoor-email-theft" rel="noopener noreferrer"&gt;postmark-mcp npm package&lt;/a&gt; shipped an update that BCC’d every email it sent to an attacker’s address. If integrations are core to your product, you want to own the logic that executes tool calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server quality varies:&lt;/strong&gt; Across the roughly &lt;a href="https://blog.modelcontextprotocol.io/posts/2025-12-09-mcp-joins-agentic-ai-foundation/" rel="noopener noreferrer"&gt;10,000 active MCP servers&lt;/a&gt;, maintenance and quality are uneven.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Using custom tool calls in your product’s agent
&lt;/h2&gt;

&lt;p&gt;With custom tool calls, the agent gets a small set of tools shaped to your product (an &lt;code&gt;upsert_contact&lt;/code&gt; instead of four chained CRM calls), your users authorize their own accounts through your app, and only your code touches their data.&lt;/p&gt;

&lt;p&gt;What you own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The execution layer:&lt;/strong&gt; OAuth apps, token refresh, retries, rate limits, and pagination for every API you integrate. Based on our experience implementing auth for 800+ APIs, this is &lt;a href="https://nango.dev/blog/api-auth-is-deep" rel="noopener noreferrer"&gt;deeper work than it looks&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool maintenance:&lt;/strong&gt; The underlying API changes, your product’s use cases change, and the tools have to keep up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The execution platform:&lt;/strong&gt; Tool code needs hosting, scaling, secrets management, and logs, separate from your product’s core backend.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The build cost has dropped since coding agents became good at writing integration code. We &lt;a href="https://nango.dev/blog/learned-building-200-api-integrations-with-opencode" rel="noopener noreferrer"&gt;built 200+ API integrations in 15 minutes&lt;/a&gt; with OpenCode and the Nango builder skill.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP vs custom tool calls: comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Custom tool calls&lt;/th&gt;
&lt;th&gt;Third-party MCP servers&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Time to first call&lt;/td&gt;
&lt;td&gt;Hours with a coding agent&lt;/td&gt;
&lt;td&gt;Minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool design&lt;/td&gt;
&lt;td&gt;Shaped to your use cases&lt;/td&gt;
&lt;td&gt;Generic, endpoint-shaped&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context cost&lt;/td&gt;
&lt;td&gt;Low: only the tools you define&lt;/td&gt;
&lt;td&gt;High: all connected servers' definitions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool-selection reliability&lt;/td&gt;
&lt;td&gt;High: small, curated set&lt;/td&gt;
&lt;td&gt;Degrades as the catalog grows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth to the external API&lt;/td&gt;
&lt;td&gt;You implement it (or use a platform)&lt;/td&gt;
&lt;td&gt;Server operator implements it, quality varies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Per-user auth (your customers authorize their accounts)&lt;/td&gt;
&lt;td&gt;Yes, under your control&lt;/td&gt;
&lt;td&gt;Rarely supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security surface&lt;/td&gt;
&lt;td&gt;Smaller: your code&lt;/td&gt;
&lt;td&gt;Larger: third-party code plus untrusted tool descriptions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Maintenance&lt;/td&gt;
&lt;td&gt;You maintain the tools&lt;/td&gt;
&lt;td&gt;You depend on the server maintainer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works with your agent framework&lt;/td&gt;
&lt;td&gt;Yes, via REST or SDK call&lt;/td&gt;
&lt;td&gt;Yes, if the framework has an MCP client&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How to choose
&lt;/h2&gt;

&lt;p&gt;Two questions decide it: who supervises the agent, and whose accounts does it act on?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developer tooling and internal agents:&lt;/strong&gt; Public MCP servers are a good fit. Your own engineers supervise the calls, a flaky tool is an annoyance rather than a customer incident, and if the API you need already has an MCP server, it is quick to wire up. You can switch to custom tools later anyway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The production agent in your customer-facing product:&lt;/strong&gt; Use custom tool calls. Your customers authorize their own accounts, the agent picks from a small set of tools that match your product, and requests stay fast and cheap because the context only carries tools you chose.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Custom tools can also be served over MCP. Write the tools once, then let your agent consume them over REST, or over an MCP server if your agent framework is MCP-native.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build custom tool calls (and get an MCP server) with Nango
&lt;/h2&gt;

&lt;p&gt;With &lt;a href="https://nango.dev" rel="noopener noreferrer"&gt;Nango&lt;/a&gt;, you build custom tool calls against external APIs on infrastructure built for scale, and coding agents do most of the work. For your product’s agent, it works in three parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Build tools with coding agents:&lt;/strong&gt; Use Claude Code, Cursor, or Codex with the &lt;a href="https://nango.dev/docs/guides/functions/functions-guide" rel="noopener noreferrer"&gt;Nango builder skill&lt;/a&gt; to research the external API, write the tool call as a typed function, and test it against a real connection, within minutes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nango runs them:&lt;/strong&gt; Auth (OAuth, API keys, token refresh), retries, rate limits, and per-execution logs across &lt;a href="https://nango.dev/api-integrations" rel="noopener noreferrer"&gt;800+ APIs&lt;/a&gt;. Your users authorize their accounts in your app, credentials stay server-side, and your agent only ever holds a connection ID.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your agent consumes them from any stack:&lt;/strong&gt; Trigger tools over &lt;a href="https://nango.dev/docs/guides/functions/tool-calling" rel="noopener noreferrer"&gt;REST&lt;/a&gt; from OpenAI, Anthropic, the Vercel AI SDK, LangChain, or Mastra, or point an MCP-native agent at Nango’s &lt;a href="https://nango.dev/docs/guides/functions/tool-calling#mcp-server" rel="noopener noreferrer"&gt;built-in MCP server&lt;/a&gt; at &lt;code&gt;https://api.nango.dev/mcp&lt;/code&gt;, which serves the same custom tools with strict typed schemas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is how the pieces fit together at runtime:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fettc79ky676r0e0e8eim.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fettc79ky676r0e0e8eim.jpg" alt="Sequence diagram of Nango at runtime: the agent triggers a tool with a connection ID and Nango resolves the customer's token and calls the external API" width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If part of your integration surface is a third-party MCP server, Nango covers that side too: the &lt;a href="https://nango.dev/docs/integrations/all/mcp-generic" rel="noopener noreferrer"&gt;MCP Generic integration&lt;/a&gt; manages your users’ OAuth to external MCP servers (dynamic discovery, PKCE, client registration).&lt;/p&gt;

&lt;p&gt;For real examples of building custom tool calls and exposing them to an agent, see how we built &lt;a href="https://nango.dev/blog/build-a-github-api-integration-for-ai-agents" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, &lt;a href="https://nango.dev/blog/how-to-build-a-notion-api-integration-using-nango-and-claude" rel="noopener noreferrer"&gt;Notion&lt;/a&gt;, and &lt;a href="https://nango.dev/blog/how-to-build-a-gmail-api-integration-with-nango-and-claude" rel="noopener noreferrer"&gt;Gmail&lt;/a&gt; integrations for AI agents.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hfx9s58epsupa3bllyr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hfx9s58epsupa3bllyr.gif" alt="Building a customer-facing GitHub API integration with Nango and an AI coding agent" width="600" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ: MCP vs function calling
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Should I use MCP or tool calls for the AI agent in my product?
&lt;/h3&gt;

&lt;p&gt;Use custom tool calls if the agent ships to customers, and MCP servers for internal agents and developer tooling. Custom tools give you per-user auth, a small reliable toolset, and control over the code that touches customer data. MCP servers get you running fastest when your own engineers supervise the agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  How is MCP different from function calling?
&lt;/h3&gt;

&lt;p&gt;Function calling is the LLM mechanism where a model returns a structured request to run a function you defined. MCP is a protocol built on top of it that standardizes how tools are discovered and executed across clients and servers. Every MCP tool still reaches the model as an ordinary function definition.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does authentication work with MCP vs custom tool calls?
&lt;/h3&gt;

&lt;p&gt;With custom tool calls, your app runs the OAuth flow with each customer and your executor attaches that customer’s token to every API call (a platform like Nango manages this). With MCP, the OAuth flow authorizes your agent to the MCP server, and auth to the underlying API depends on what the server operator built. For a deeper look, see our &lt;a href="https://nango.dev/blog/guide-to-secure-ai-agent-api-authentication" rel="noopener noreferrer"&gt;guide to secure AI agent authentication&lt;/a&gt; and &lt;a href="https://nango.dev/blog/id-jag-agent-authentication" rel="noopener noreferrer"&gt;how ID-JAG helps AI agents authenticate&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much context do MCP tool definitions consume?
&lt;/h3&gt;

&lt;p&gt;Often tens of thousands of tokens per request, because every connected server’s tool definitions load into the model request whether the agent uses them or not. Anthropic documents a typical five-server setup at around &lt;a href="https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool" rel="noopener noreferrer"&gt;55,000 tokens of tool definitions&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  When should you not use MCP?
&lt;/h3&gt;

&lt;p&gt;Avoid third-party MCP servers when your agent runs unattended inside a customer-facing product: token overhead hits every request, generic tools reduce reliability, per-user auth is rarely supported, and you cannot review the code that handles customer data. Use custom tool calls there, and serve them over your own MCP server if your agent stack expects MCP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;MCP and tool calls sit at different layers. MCP standardizes tool discovery and execution on top of function calling, and public MCP servers are the fastest route for internal agents and developer tooling. For the agent inside your product, custom tool calls are the safer choice: your customers authorize their own accounts, the agent works from a small set of tools built for your use cases, and you own the code that touches customer data. Build them with a coding agent, run them on a platform that handles auth and execution, and serve them over REST or MCP.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Related reading:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/build-reliable-tool-calls-for-ai-agents-integrating-with-external-apis" rel="noopener noreferrer"&gt;How to build reliable tool calls for AI agents integrating with external APIs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/why-ai-agents-meed-an-integrations-platform" rel="noopener noreferrer"&gt;Why AI agents need an integrations platform&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/guide-to-secure-ai-agent-api-authentication" rel="noopener noreferrer"&gt;A complete guide to securing AI agent API authentications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/id-jag-agent-authentication" rel="noopener noreferrer"&gt;How ID-JAG helps AI agents authenticate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/just-in-time-integrations" rel="noopener noreferrer"&gt;The emergence of just-in-time integrations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>mcp</category>
      <category>toolcall</category>
      <category>agents</category>
    </item>
    <item>
      <title>How to make AI agents react to API webhooks</title>
      <dc:creator>Sapnesh Naik</dc:creator>
      <pubDate>Wed, 01 Jul 2026 14:53:52 +0000</pubDate>
      <link>https://dev.to/nangohq/how-to-make-ai-agents-react-to-api-webhooks-3j66</link>
      <guid>https://dev.to/nangohq/how-to-make-ai-agents-react-to-api-webhooks-3j66</guid>
      <description>&lt;p&gt;Most AI agents only act when a user prompts them. They sit idle until someone types a message or calls them over an API. But a lot of real work happens in external systems: a deal moves to “closed won” in Salesforce, a customer sends a message in Slack, a payment fails in Stripe, or a new file lands in Google Drive.&lt;/p&gt;

&lt;p&gt;To handle those cases, your agent has to react to events happening in external systems instead of waiting for a prompt. This post covers why event-driven AI agents matter and the main ways to make an agent react to external events, and what to do once an event arrives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AI agents need to react to external events
&lt;/h2&gt;

&lt;p&gt;An event-driven AI agent responds to changes in external systems in near real time, instead of waiting for a user to prompt it.&lt;/p&gt;

&lt;p&gt;There are two ways to trigger an agent:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pull (request-response):&lt;/strong&gt; the agent runs when a user or another service calls it. This fits chat and on-demand tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Push (event-driven):&lt;/strong&gt; the agent runs when something happens in an external system. This fits automation that should not wait for a human.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The push model matters for three reasons. It reacts in seconds rather than on the next polling cycle. It avoids the wasted API calls and cost of checking for changes that did not happen. And it lets the agent do useful work in the background, with no human in the loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common use cases for event-driven AI agents
&lt;/h2&gt;

&lt;p&gt;Event-driven agents are useful anywhere a change in one system should trigger work in another. A few concrete examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CRM updates:&lt;/strong&gt; a deal changes stage in Salesforce. The agent drafts a follow-up email and updates the next step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support tickets:&lt;/strong&gt; a ticket arrives in Zendesk. The agent triages it, adds tags, and suggests a reply.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team messaging:&lt;/strong&gt; a customer posts in a shared Slack channel. The agent answers from your docs and CRM data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code review:&lt;/strong&gt; a pull request opens in GitHub. A review agent reads the diff and comments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payments:&lt;/strong&gt; a charge fails in Stripe. The agent retries, notifies the customer, and flags the account.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File processing:&lt;/strong&gt; a file uploads to Google Drive. The agent extracts the text and syncs it to your RAG index.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They all share the same shape: an external event triggers the agent, the agent reads context, and the agent takes action through APIs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ways to make AI agents react to external events
&lt;/h2&gt;

&lt;p&gt;There are three main mechanisms: polling on a schedule, webhooks from external APIs, and event streams. Most production systems combine at least two of them, depending on what the external API supports.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mechanism&lt;/th&gt;
&lt;th&gt;Latency&lt;/th&gt;
&lt;th&gt;Efficiency&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Polling&lt;/td&gt;
&lt;td&gt;Minutes&lt;/td&gt;
&lt;td&gt;Low (runs even when nothing changed)&lt;/td&gt;
&lt;td&gt;APIs with no webhooks, and as a reliability safety net&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Webhooks&lt;/td&gt;
&lt;td&gt;Seconds&lt;/td&gt;
&lt;td&gt;High (fires only on a real change)&lt;/td&gt;
&lt;td&gt;Most real-time reactions to SaaS events&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Event streams&lt;/td&gt;
&lt;td&gt;Milliseconds to seconds&lt;/td&gt;
&lt;td&gt;High at large volume&lt;/td&gt;
&lt;td&gt;High-throughput pipelines and agent-to-agent workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Polling on a schedule
&lt;/h3&gt;

&lt;p&gt;Polling means the agent, or a background job, checks an API on a fixed interval and reacts to anything new since the last check.&lt;/p&gt;

&lt;p&gt;It is the simplest option and works with any API, even ones that offer no push mechanism. The tradeoffs are latency and waste: your reaction time is only as fast as the interval, and most requests return nothing new while still counting against rate limits.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuh0dc4ce10muf5dzv4he.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuh0dc4ce10muf5dzv4he.jpg" alt="Polling: a scheduled job checks the external API on a fixed interval and triggers the agent when there is new data" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use polling when an API has no webhooks, or as a safety net behind webhooks (more on that below).&lt;/p&gt;

&lt;h3&gt;
  
  
  Webhooks from external APIs
&lt;/h3&gt;

&lt;p&gt;A webhook is an HTTP POST that a provider sends to your endpoint the moment something changes. This is the push model, and for most real-time use cases it is the right default: reactions arrive in seconds, and the provider only calls you when there is an actual change.&lt;/p&gt;

&lt;p&gt;The catch is that every provider does webhooks differently. Each one has its own registration flow, payload shape, signature scheme, and retry behavior. On top of that, you have to map each incoming event back to the right customer in your system, and some subscriptions expire and need renewal. Google Calendar push channels &lt;a href="https://developers.google.com/workspace/calendar/api/guides/push#special-considerations" rel="noopener noreferrer"&gt;expire after 7 days&lt;/a&gt;, and &lt;a href="https://nango.dev/blog/how-to-build-a-gmail-api-integration-with-nango-and-claude" rel="noopener noreferrer"&gt;Gmail’s push &lt;/a&gt;&lt;a href="https://nango.dev/blog/how-to-build-a-gmail-api-integration-with-nango-and-claude" rel="noopener noreferrer"&gt;&lt;code&gt;watch&lt;/code&gt;&lt;/a&gt;&lt;a href="https://nango.dev/blog/how-to-build-a-gmail-api-integration-with-nango-and-claude" rel="noopener noreferrer"&gt; expires on the same cadence&lt;/a&gt;, so you have to re-register both before they lapse.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faitrkesgouee0yyijrkv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faitrkesgouee0yyijrkv.jpg" alt="Webhooks: the external API pushes an event to your endpoint, which verifies the signature, maps it to a connection, and deduplicates before triggering the agent" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The mechanism is simple. The work is in the per-provider plumbing around it, which is where an integration platform helps (covered below).&lt;/p&gt;

&lt;h3&gt;
  
  
  Event streams and message queues
&lt;/h3&gt;

&lt;p&gt;For high-throughput or multi-agent systems, events flow through a stream or message queue such as Kafka, Amazon SQS, or Google Pub/Sub. Agents subscribe to the stream and process events as they arrive.&lt;/p&gt;

&lt;p&gt;This adds two capabilities that raw webhooks do not have. You can replay history, so an agent can reprocess past events after a bug fix. And agents can react to each other: agent A emits a &lt;code&gt;task.completed&lt;/code&gt; event, agent B listens for it and continues the workflow. This is the choreography pattern, and it is how larger multi-agent systems stay decoupled.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2f82574pzv1caonay4zd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2f82574pzv1caonay4zd.jpg" alt="Event streams: external events and agents publish to a replayable event stream that multiple agents subscribe to and react to" width="800" height="206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The tradeoff is that you run and scale the streaming infrastructure yourself. Reach for this when volume is high or when you have several agents coordinating. It is overkill for a single agent reacting to a handful of SaaS events.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do when an event arrives
&lt;/h2&gt;

&lt;p&gt;Once the event reaches your system, the agent usually does one of four things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Execute a tool call:&lt;/strong&gt; run a predefined, typed function like &lt;code&gt;upsert-contact&lt;/code&gt; or &lt;code&gt;create-issue&lt;/code&gt; via API or MCP. This keeps the action deterministic and safe, instead of letting the LLM build a raw HTTP request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trigger a data sync:&lt;/strong&gt; refresh your local copy of the customer’s data (and your RAG index) for that connection, so the agent reasons over fresh context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Call an API directly:&lt;/strong&gt; for a one-off read or write, send a single request to the provider without managing auth yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start or resume an agent loop:&lt;/strong&gt; hand the event and the right tools to the LLM and let it decide the next steps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are often chained. A common pattern is: event arrives, trigger a sync to pull the latest data, let the agent reason over it, then have the agent run a tool call to write something back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making event handling reliable
&lt;/h2&gt;

&lt;p&gt;Reacting to events in production takes more than receiving an HTTP request:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Verify signatures:&lt;/strong&gt; most providers sign webhooks with an HMAC of the payload. Compute the HMAC with your shared secret and compare it to the header, using the raw request body before any JSON parsing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deduplicate events:&lt;/strong&gt; networks cause webhooks to arrive more than once. Track each event ID and skip anything you have already processed, so the agent does not act twice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Return fast, process async:&lt;/strong&gt; acknowledge the webhook with a &lt;code&gt;200&lt;/code&gt; quickly, then do the real work in the background. Slow handlers cause providers to time out and retry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep a polling safety net:&lt;/strong&gt; webhooks get dropped. Google’s own docs note push notifications are &lt;a href="https://developers.google.com/workspace/calendar/api/guides/push#special-considerations" rel="noopener noreferrer"&gt;“not 100% reliable”&lt;/a&gt;. A low-frequency poll catches anything the webhooks miss.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Map events to the right connection:&lt;/strong&gt; a webhook usually identifies an account, not your internal customer. You need a reliable way to resolve which customer and credentials each event belongs to.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reacting to external events with Nango
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://nango.dev" rel="noopener noreferrer"&gt;Nango&lt;/a&gt; is the integration platform where coding agents build integrations. Engineers use &lt;a href="https://nango.dev/docs/guides/functions/functions-guide" rel="noopener noreferrer"&gt;agent skills&lt;/a&gt; with coding tools like Claude Code, Cursor, and Codex to build integrations as code in a git repo, and Nango’s cloud runtime runs them securely and at scale. Integrations cover &lt;a href="https://nango.dev/docs/getting-started/use-cases/actions" rel="noopener noreferrer"&gt;API auth&lt;/a&gt;, tool calls, &lt;a href="https://nango.dev/docs/getting-started/use-cases/syncs" rel="noopener noreferrer"&gt;data syncs&lt;/a&gt;, and &lt;a href="https://nango.dev/docs/getting-started/use-cases/webhooks-from-external-apis" rel="noopener noreferrer"&gt;webhooks&lt;/a&gt; across &lt;a href="https://nango.dev/api-integrations" rel="noopener noreferrer"&gt;800+ APIs&lt;/a&gt;, and it is &lt;a href="https://github.com/NangoHQ/nango" rel="noopener noreferrer"&gt;open source&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For the event side specifically, Nango removes most of the plumbing described above. It gives each integration one webhook URL, attributes every incoming event to the right connection, verifies the provider’s signature, retries, and logs each event. You then choose what happens next:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Forward the event to your app:&lt;/strong&gt; Nango sends you a normalized payload with the &lt;code&gt;connectionId&lt;/code&gt; already resolved, and your backend handles the logic. Use this when you already have webhook handling. See &lt;a href="https://nango.dev/docs/guides/platform/webhook-forwarding" rel="noopener noreferrer"&gt;webhook forwarding&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Process the event inside Nango:&lt;/strong&gt; a &lt;a href="https://nango.dev/docs/guides/functions/webhook-functions" rel="noopener noreferrer"&gt;webhook function&lt;/a&gt; runs as soon as the event arrives. It can update your synced data or trigger an incremental sync so your app reads fresh records. See &lt;a href="https://nango.dev/docs/guides/functions/syncs/realtime-syncs" rel="noopener noreferrer"&gt;real-time syncs&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A forwarded event arrives at your endpoint in a consistent envelope, regardless of provider. Nango wraps the provider’s raw event in &lt;code&gt;payload&lt;/code&gt; and adds the resolved &lt;code&gt;connectionId&lt;/code&gt;, so you always know which customer it belongs to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"from"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hubspot"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"providerConfigKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hubspot"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"forward"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"connectionId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"connection-123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"payload"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"subscriptionType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"contact.propertyChange"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"objectId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"propertyName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"lifecyclestage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"propertyValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"customer"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Processing an event inside a sync function looks like this. The &lt;code&gt;onWebhook&lt;/code&gt; handler runs when the provider sends an event, and the scheduled &lt;code&gt;frequency&lt;/code&gt; acts as the safety net for anything the webhooks miss:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createSync&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nango&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;createSync&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Sync CRM contacts, react to changes in real time&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;frequency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;every hour&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// safety net for missed webhooks&lt;/span&gt;
    &lt;span class="na"&gt;webhookSubscriptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// route provider webhooks to onWebhook&lt;/span&gt;
    &lt;span class="c1"&gt;// ...models and checkpoint config&lt;/span&gt;
    &lt;span class="na"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;syncContacts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// scheduled poll&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;onWebhook&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;syncContacts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// same logic, triggered by the event&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the data is fresh, the agent acts. With Nango you can run a typed &lt;a href="https://nango.dev/docs/getting-started/use-cases/tool-calling" rel="noopener noreferrer"&gt;tool call&lt;/a&gt; (also exposed over MCP), or make a one-off request to any endpoint through the &lt;a href="https://nango.dev/docs/guides/platform/proxy-requests" rel="noopener noreferrer"&gt;proxy&lt;/a&gt; without touching tokens:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Run a predefined tool call for the connection that emitted the event&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;triggerAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;salesforce&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;connectionId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;create-note&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;dealId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;draftedNote&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Or make a direct API call through Nango's proxy (auth handled for you)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/crm/v3/objects/contacts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;providerConfigKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hubspot&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;connectionId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You do not write this integration code by hand. Nango ships &lt;a href="https://nango.dev/docs/guides/functions/functions-guide" rel="noopener noreferrer"&gt;skills for AI coding agents&lt;/a&gt; so Claude Code, Cursor, or Codex can research the API, write the webhook and sync functions, and test them against a real connection. That makes &lt;a href="https://nango.dev/blog/just-in-time-integrations" rel="noopener noreferrer"&gt;just-in-time integrations&lt;/a&gt; practical: an agent can build a new event-driven integration on demand, prompted by an engineer or even a customer, instead of your team pre-building one per provider.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvur7fu7soa86fxfqqehl.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvur7fu7soa86fxfqqehl.gif" alt="Codex subscribing a Nango integration to webhook events" width="720" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once events are flowing, every run shows up in the Nango dashboard, attributed to the connection it belongs to, so you can see which action, sync, and webhook fired for each customer:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsanl6nsp4h30e4txpfsk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsanl6nsp4h30e4txpfsk.png" alt="Nango dashboard logs showing action, sync, and webhook runs for a connection" width="799" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Getting an AI agent to react to external events comes down to two decisions. First, pick how the event reaches you: polling for APIs without push support, webhooks for most real-time cases, and event streams for high volume or multi-agent workflows. Second, decide what the agent does with the event: run a tool call, trigger a sync, call an API directly, or start an agent loop.&lt;/p&gt;

&lt;p&gt;The event mechanism is simple. Signatures, deduplication, connection mapping, renewals, and a polling fallback are where most of the effort goes, and they repeat for every provider. A code-first integration platform like Nango handles that layer so your agent code stays focused on what to do when something happens, not on the plumbing that tells it something happened.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related reading:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/why-ai-agents-meed-an-integrations-platform" rel="noopener noreferrer"&gt;Why AI agents need an integrations platform&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/how-to-build-a-real-time-google-calendar-api-integration" rel="noopener noreferrer"&gt;How to build a real-time Google Calendar API integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/build-reliable-tool-calls-for-ai-agents-integrating-with-external-apis" rel="noopener noreferrer"&gt;How to build reliable tool calls for AI agents integrating with external APIs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-practices-for-building-api-integrations-with-ai-agents" rel="noopener noreferrer"&gt;Best practices for building API integrations with AI agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/just-in-time-integrations" rel="noopener noreferrer"&gt;Just-in-time integrations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Arcade.dev vs Nango: which platform for production AI agent integrations in 2026?</title>
      <dc:creator>Sapnesh Naik</dc:creator>
      <pubDate>Tue, 30 Jun 2026 16:42:01 +0000</pubDate>
      <link>https://dev.to/nangohq/arcadedev-vs-nango-which-platform-for-production-ai-agent-integrations-in-2026-48pp</link>
      <guid>https://dev.to/nangohq/arcadedev-vs-nango-which-platform-for-production-ai-agent-integrations-in-2026-48pp</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Arcade.dev is an MCP runtime for AI agent tool calling, built around agent authorization. It exposes a catalog of pre-built tools over MCP, handles per-user OAuth, and ships an SDK for writing your own MCP servers. But Arcade only has tool calls: no data syncs for RAG, no webhook ingestion, no polling triggers, and no coding-agent build loop.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nango.dev" rel="noopener noreferrer"&gt;Nango&lt;/a&gt; is the integration platform where coding agents build API integrations. Engineers use coding agents like Claude Code, Cursor, and Codex to write integrations as code in a repo. Nango’s cloud runtime runs them securely and at scale across &lt;a href="https://nango.dev/api-integrations" rel="noopener noreferrer"&gt;800+ APIs&lt;/a&gt;, with white-label auth, custom tool calls, an MCP server, durable data syncs, webhooks, and per-customer configuration on one platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick verdict:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pick Nango&lt;/strong&gt; if agent integrations are core to a product you ship to customers, or if you want coding agents to build and customize tool calls, syncs, and webhooks as you scale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick Arcade.dev&lt;/strong&gt; if your agent’s entire scope is MCP tool calling, your APIs are in its catalog, and you do not need data syncs, webhooks, or a coding-agent build loop.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Arcade.dev: an MCP runtime for agent tool calling and authorization
&lt;/h2&gt;

&lt;p&gt;Arcade.dev is an MCP runtime that handles per-user OAuth, stores user tokens, and exposes a catalog of pre-built tools that agents call over the Model Context Protocol.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2nheesdmelebv7ivtoo9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2nheesdmelebv7ivtoo9.png" alt="Arcade.dev MCP server catalog and tool-calling runtime" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The catalog is large: 7,000+ pre-built tools across roughly 80 first-party MCP servers, split into hand-built (“Optimized”) and auto-generated (“Unoptimized”) tiers, and you can hand-write your own with the open-source &lt;code&gt;arcade-mcp&lt;/code&gt; framework. The trade-off is scope. Arcade is built for the run side of one pattern, tool calls, so there are no data syncs or webhooks, the build process does not leverage AI, the Engine that stores tokens is proprietary, and several governance features are Enterprise-only.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nango: build integrations with AI
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://nango.dev" rel="noopener noreferrer"&gt;Nango&lt;/a&gt; is a code-first platform where engineers use AI coding agents like Claude Code and Cursor to build API integrations for your product and the AI agents inside it. The integrations cover an agent’s full surface: tool calls and an MCP server the agents consume, plus the auth, data syncs, and webhooks behind them. The platform is a three-part system:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Integrations as code, written by your coding agent.&lt;/strong&gt; Install the universal &lt;a href="https://nango.dev/docs/implementation-guides/platform/functions/leverage-ai-agents" rel="noopener noreferrer"&gt;Nango builder skill&lt;/a&gt; once. The agent reads API docs, builds the integration, tests it against a real connection, and iterates on real errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A secure and scalable runtime.&lt;/strong&gt; Functions run on Nango’s cloud with tenant isolation and resumable execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A single interface for every use case.&lt;/strong&gt; &lt;a href="https://nango.dev/docs/guides/auth/auth-guide" rel="noopener noreferrer"&gt;API auth&lt;/a&gt;, &lt;a href="https://nango.dev/docs/implementation-guides/use-cases/tool-calling/overview" rel="noopener noreferrer"&gt;tool calls&lt;/a&gt;, &lt;a href="https://nango.dev/docs/implementation-guides/use-cases/syncs/implement-a-sync" rel="noopener noreferrer"&gt;data syncs&lt;/a&gt;, &lt;a href="https://nango.dev/docs/implementation-guides/use-cases/webhooks-from-external-apis" rel="noopener noreferrer"&gt;webhooks&lt;/a&gt;, polling triggers, and &lt;a href="https://nango.dev/blog/build-unified-api-for-product-integrations" rel="noopener noreferrer"&gt;custom unified APIs&lt;/a&gt;, all as functions in your repo.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nango is &lt;a href="https://github.com/NangoHQ/nango" rel="noopener noreferrer"&gt;open source&lt;/a&gt;, supports 4,400+ prebuilt tools across &lt;a href="https://nango.dev/api-integrations" rel="noopener noreferrer"&gt;800+ APIs&lt;/a&gt; and 30 categories, and is used in production by &lt;a href="https://nango.dev/customers" rel="noopener noreferrer"&gt;hundreds of fast-growing SaaS and AI companies&lt;/a&gt;. It also supports &lt;a href="https://nango.dev/blog/just-in-time-integrations" rel="noopener noreferrer"&gt;just-in-time integrations&lt;/a&gt;: a coding agent builds an integration on demand when a customer asks for one, instead of pre-building every one by hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Six limits with Arcade.dev
&lt;/h2&gt;

&lt;p&gt;Arcade fits a narrow scope: an agent calls a few APIs as a real user, and those APIs are in the catalog. As the surface widens, six limits show up.&lt;/p&gt;

&lt;h3&gt;
  
  
  No coding-agent skill for building integrations
&lt;/h3&gt;

&lt;p&gt;Arcade’s SDK is for a human developer hand-writing and packaging MCP servers locally. There is no skill for Claude Code, Cursor, or Codex, no testing loop against a real connection, and no path for a coding agent to author and ship a tool end-to-end.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tool calls are the only pattern
&lt;/h3&gt;

&lt;p&gt;Arcade covers tool calling and nothing else: no durable data syncs for RAG, no webhook ingestion, no polling triggers, no unified-API layer. So when your agent needs the freshest CRM records, or has to react when a deal closes in Salesforce, you build the sync, the schedule, the resume logic, and the webhook receiver yourself, outside Arcade.&lt;/p&gt;

&lt;h3&gt;
  
  
  Low API support
&lt;/h3&gt;

&lt;p&gt;The 7,000+ figure counts individual tools. What matters for coverage is how many APIs you can reach: roughly 80 first-party MCP servers, with the rest of the registry made up of community and auto-generated ones that may need customization before they are production-ready. When your API is not covered, you hand-write an MCP server in the SDK. Generic, non-bespoke tools also &lt;a href="https://nango.dev/blog/build-reliable-tool-calls-for-ai-agents-integrating-with-external-apis" rel="noopener noreferrer"&gt;inflate context and hurt reliability&lt;/a&gt;, because they are not tailored to your agent’s intent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Your customers authorize Arcade and not your app
&lt;/h3&gt;

&lt;p&gt;By default, end users see “Arcade” on the OAuth consent screen and sign in through arcade.dev. To put your brand on the flow, you register your own OAuth client per provider and build a custom verifier route. That is workable, but it is per-provider configuration you own, not a drop-in default, which matters when every customer connects their own account under your brand.&lt;/p&gt;

&lt;h3&gt;
  
  
  Governance, RBAC, SSO, and tenant isolation are Enterprise-gated
&lt;/h3&gt;

&lt;p&gt;Arcade markets central governance, but the controls that back it up are Enterprise-only: audit logs and compliance reporting, role-based access control, SSO and SAML, and dedicated tenant isolation. On the free and usage-based tiers, you run on shared infrastructure without them.&lt;/p&gt;

&lt;h3&gt;
  
  
  The runtime that holds your tokens is proprietary
&lt;/h3&gt;

&lt;p&gt;Arcade is not fully open-source. The Engine, the hosted runtime that stores user tokens, brokers OAuth, and executes tool calls, is proprietary, and self-hosting it (VPC, on-prem, or air-gapped) requires Enterprise deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  What engineers like about Nango
&lt;/h2&gt;

&lt;p&gt;Nango covers agent authorization, custom tool calls, data syncs, webhook processing, and unified APIs on a single runtime, with code-level access and an AI coding agent build loop built in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Coding agents build the integrations
&lt;/h3&gt;

&lt;p&gt;Install the &lt;a href="https://nango.dev/docs/implementation-guides/platform/functions/leverage-ai-agents" rel="noopener noreferrer"&gt;Nango builder skill&lt;/a&gt; once. Your coding agent reads API docs, writes the integration, tests it against a real connection with &lt;code&gt;nango dryrun&lt;/code&gt;, and iterates on real errors before deploying. The skill works the same way for any of the 800+ APIs Nango supports.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq6nxgtii62k355e7bpbx.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq6nxgtii62k355e7bpbx.gif" alt="Claude Code generating a HubSpot contacts sync with the Nango skill" width="600" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A prompt like this is enough:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/building-nango-functions-locally Build a real-time Google Calendar integration with webhook support.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Every integration use case on one platform
&lt;/h3&gt;

&lt;p&gt;API auth, &lt;a href="https://nango.dev/docs/implementation-guides/use-cases/syncs/implement-a-sync" rel="noopener noreferrer"&gt;data syncs&lt;/a&gt;, &lt;a href="https://nango.dev/docs/implementation-guides/use-cases/webhooks-from-external-apis" rel="noopener noreferrer"&gt;webhook processing&lt;/a&gt;, polling triggers, &lt;a href="https://nango.dev/docs/implementation-guides/use-cases/tool-calling/overview" rel="noopener noreferrer"&gt;tool calls&lt;/a&gt;, and an &lt;a href="https://nango.dev/docs/implementation-guides/use-cases/tool-calling/implement-mcp-server" rel="noopener noreferrer"&gt;MCP server&lt;/a&gt; all run on Nango. A Nango sync is the same kind of function as a Nango tool call. Both share the same runtime, observability, and build loop. Arcade is tool-call only; the rest of your integration surface lives elsewhere.&lt;/p&gt;

&lt;h3&gt;
  
  
  Built-in MCP server with custom tools
&lt;/h3&gt;

&lt;p&gt;Nango’s &lt;a href="https://nango.dev/docs/implementation-guides/use-cases/tool-calling/implement-mcp-server" rel="noopener noreferrer"&gt;MCP server&lt;/a&gt; exposes your custom tools to AI agents inside your product, with strict typed input and output schemas. Because the tools are yours, you can author intent-shaped tool calls that match your product’s exact intent instead of chaining generic ones. The MCP server enforces per-user and per-customer permissions through the same runtime that runs your auth and syncs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft4jt5xnztqzs42guo5hh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft4jt5xnztqzs42guo5hh.png" alt="Nango MCP server registered in Claude with per-tool permissions for compile, deploy, dryrun, and execute actions" width="799" height="618"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  White-label auth across 800+ APIs
&lt;/h3&gt;

&lt;p&gt;A drop-in &lt;a href="https://nango.dev/docs/guides/auth/customize-connect-ui" rel="noopener noreferrer"&gt;Connect UI&lt;/a&gt; handles OAuth, API keys, JWT, basic auth, and the &lt;a href="https://nango.dev/docs/updates/product#support-for-mcp-auth" rel="noopener noreferrer"&gt;MCP Auth&lt;/a&gt; standard. End users authorize against your brand, not Nango’s, by default. &lt;a href="https://nango.dev/docs/guides/auth/customize-connect-ui" rel="noopener noreferrer"&gt;Headless auth&lt;/a&gt; is available if you want to ship your own UI. Token refresh, concurrency-safe refresh, and custom credential validation ship on every plan.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxou4u3k1moderkpjqqr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxou4u3k1moderkpjqqr.gif" alt="Adding a HubSpot test connection from the Nango dashboard via the OAuth flow" width="720" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Deep observability with OpenTelemetry
&lt;/h3&gt;

&lt;p&gt;Every operation generates &lt;a href="https://nango.dev/docs/guides/platform/observability" rel="noopener noreferrer"&gt;structured logs&lt;/a&gt; with full external API request and response details, custom log messages, full-text search, and OpenTelemetry export, on every plan. A Claude Code session can read a failing dry run, see the exact response that broke parsing, and ship a fix in the same turn.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjz3ewrpmwhbtgdg5n3w2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjz3ewrpmwhbtgdg5n3w2.png" alt="Nango logs dashboard showing full request and response details" width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Open source, compliance, and self-hosting
&lt;/h3&gt;

&lt;p&gt;Nango is &lt;a href="https://github.com/NangoHQ/nango" rel="noopener noreferrer"&gt;open source&lt;/a&gt; and &lt;a href="https://trust.nango.dev" rel="noopener noreferrer"&gt;SOC 2 Type II, GDPR, and HIPAA compliant&lt;/a&gt;. &lt;a href="https://nango.dev/blog/best-self-hosted-api-integration-platforms-for-ai-agents" rel="noopener noreferrer"&gt;Self-hosting&lt;/a&gt; is available for teams with data residency or risk-management requirements. Tenant isolation, structured audit logs of every external API call, and encrypted credentials at rest ship by default.&lt;/p&gt;

&lt;h2&gt;
  
  
  Arcade.dev vs Nango for AI agents and LLM tool calling
&lt;/h2&gt;

&lt;p&gt;If you are building AI agents that call third-party APIs in production, three things matter: how new tools get built, whether those tools can be customized to your product’s intent, and whether the rest of the integration stack (auth, syncs, webhooks) lives on the same runtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arcade has a fixed catalog.&lt;/strong&gt; It handles per-user OAuth, checks permissions before a tool runs, and exposes a large set of pre-built tools over MCP. The constraints are that you build with the catalog Arcade ships, custom tools are hand-written in the SDK, and the surface stops at tool calls. There is no coding-agent skill that authors and deploys a new tool, and no data syncs or webhooks when your agent needs more than a single call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nango has custom tool calls, an MCP server, agent auth, and AI coding agent support.&lt;/strong&gt; Your coding agent writes tool calls as TypeScript functions in your repo. Each function deploys to Nango and is exposed through the &lt;a href="https://nango.dev/docs/implementation-guides/use-cases/tool-calling/implement-mcp-server" rel="noopener noreferrer"&gt;Nango MCP server&lt;/a&gt; with strict typed schemas. Per-user and per-customer permissions are enforced by the same runtime that runs your auth and syncs. When the agent needs fresh data, it queries a Nango sync, not a polling cycle you wrote yourself.&lt;/p&gt;

&lt;p&gt;For the full pattern, see &lt;a href="https://nango.dev/blog/best-agentic-api-integrations-platform" rel="noopener noreferrer"&gt;best agentic API integrations platform in 2026&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Arcade.dev vs Nango: feature comparison
&lt;/h2&gt;

&lt;p&gt;Here is how Arcade.dev and Nango compare across each agent integration pattern: tool calls, MCP, data syncs for RAG, webhooks and triggers, developer experience, customizability, open source, and self-hosting.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Nango&lt;/th&gt;
&lt;th&gt;Arcade.dev&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Catalog&lt;/td&gt;
&lt;td&gt;4,400+ prebuilt tools across 800+ APIs (30 categories)&lt;/td&gt;
&lt;td&gt;7,000+ tools across ~80 first-party MCP servers (~157 in registry incl. community)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build model&lt;/td&gt;
&lt;td&gt;Code in your repo, written by your coding agent&lt;/td&gt;
&lt;td&gt;Hand-written MCP servers in the Arcade SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI coding agent skill (Claude Code, Cursor, Codex)&lt;/td&gt;
&lt;td&gt;Yes (universal builder skill, dryrun against real APIs)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom tool calls deployed to runtime&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes (hand-written via SDK)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP server&lt;/td&gt;
&lt;td&gt;Built-in, exposes your custom tools&lt;/td&gt;
&lt;td&gt;MCP-native, exposes catalog and custom servers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent authorization (per-user OAuth)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data syncs for RAG&lt;/td&gt;
&lt;td&gt;Durable, incremental syncs&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Webhooks and triggers&lt;/td&gt;
&lt;td&gt;Real-time webhook ingestion and polling triggers&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Per-customer configuration&lt;/td&gt;
&lt;td&gt;Yes, in code, every plan&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Observability with full request/response logs and OpenTelemetry export&lt;/td&gt;
&lt;td&gt;Yes, every plan&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RBAC, SSO, audit logs&lt;/td&gt;
&lt;td&gt;Available&lt;/td&gt;
&lt;td&gt;Enterprise-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open source&lt;/td&gt;
&lt;td&gt;Yes (platform and templates)&lt;/td&gt;
&lt;td&gt;Partial (MIT framework and SDK; proprietary Engine)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-hosting&lt;/td&gt;
&lt;td&gt;Yes (Enterprise)&lt;/td&gt;
&lt;td&gt;Enterprise (VPC, on-prem, air-gapped)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing&lt;/td&gt;
&lt;td&gt;Free tier, transparent usage-based&lt;/td&gt;
&lt;td&gt;Free tier, usage-based on tool executions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  When Arcade.dev is the right pick
&lt;/h2&gt;

&lt;p&gt;Arcade.dev is a good fit when MCP tool calling is the entire job. Your agent acts on behalf of users across a handful of APIs, those APIs are in the catalog, per-user authorization is the hard part, and you do not need data syncs, webhook processing, per-customer configuration, or a coding agent to build new tools for you. For an internal or personal-productivity agent that lives inside the catalog, Arcade does what it advertises.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Nango is the right pick
&lt;/h2&gt;

&lt;p&gt;Nango is the right pick when your AI agent is a core part of a product you ship to customers, when you want coding agents to build and customize integrations in your repo, or when your agent needs more than tool calls: data syncs for RAG, real-time webhooks, custom unified APIs, white-label auth across hundreds of APIs, or per-customer configuration.&lt;/p&gt;

&lt;p&gt;Nango covers the same starting point Arcade offers (an MCP server, managed per-user OAuth, custom tools) and adds the build loop, the runtime patterns, and the API breadth that a production AI product grows into. Transparent usage-based pricing and a free tier come built in.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to migrate from Arcade.dev to Nango
&lt;/h2&gt;

&lt;p&gt;To migrate from Arcade.dev to Nango:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build any new integrations on Nango first.&lt;/strong&gt; Do not start new work on Arcade. This caps the scope of what eventually needs to be migrated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install the&lt;/strong&gt; &lt;a href="https://nango.dev/docs/implementation-guides/platform/functions/leverage-ai-agents" rel="noopener noreferrer"&gt;&lt;strong&gt;Nango builder skill&lt;/strong&gt;&lt;/a&gt; in your coding agent (supports Claude Code, Cursor, Codex, Gemini CLI, OpenCode, and others).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Have the coding agent migrate existing tools one by one.&lt;/strong&gt; Prompt it with the intent of each Arcade tool or MCP server. The skill reads the API docs, drafts the function, tests against a Nango test connection, and iterates on real responses. Auth, retries, pagination, and observability are handled by the runtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wire the agent to Nango.&lt;/strong&gt; Expose the new tools through Nango’s REST API or &lt;a href="https://nango.dev/docs/implementation-guides/use-cases/tool-calling/implement-mcp-server" rel="noopener noreferrer"&gt;MCP server&lt;/a&gt;. For most frameworks, this is a one-line config change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add the patterns you were missing on Arcade.&lt;/strong&gt; Move RAG context loading to &lt;a href="https://nango.dev/docs/implementation-guides/use-cases/syncs/implement-a-sync" rel="noopener noreferrer"&gt;Nango syncs&lt;/a&gt;. Move event-driven behavior to &lt;a href="https://nango.dev/docs/implementation-guides/use-cases/webhooks-from-external-apis" rel="noopener noreferrer"&gt;Nango webhooks&lt;/a&gt; or polling triggers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Migrate customer connections.&lt;/strong&gt; Use Nango’s white-label &lt;a href="https://nango.dev/docs/guides/auth/customize-connect-ui" rel="noopener noreferrer"&gt;Connect UI&lt;/a&gt; to re-authorize customers under your brand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cut traffic over behind a feature flag.&lt;/strong&gt; Run Nango and Arcade side by side, ramp up the share of calls on Nango, and verify in the logs that behavior matches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decommission Arcade&lt;/strong&gt; at the renewal boundary.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is Nango an Arcade.dev alternative?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. Nango is the agentic API integrations platform that production AI teams pick when they outgrow Arcade.dev. The most common reasons for the switch are a coding-agent build loop, data syncs for RAG, webhook processing, white-label auth across more APIs, deep observability, and per-customer configuration. Nango supports 800+ APIs, ships an MCP server with custom tools, and runs auth, tool calls, syncs, webhooks, and unified APIs on one runtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between Arcade.dev and Nango?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Arcade.dev is an MCP runtime for AI agent tool calling, built around per-user agent authorization. It exposes a catalog of pre-built tools and an SDK for hand-writing custom MCP servers, and its surface stops at tool calls. Nango is an integration platform where coding agents write integrations as code in your repo, and the runtime covers auth, tool calls, data syncs, webhooks, and unified APIs across 800+ APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does Arcade.dev support data syncs or webhooks?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Arcade.dev supports tool calls only. There is no data sync capability for RAG, no webhook ingestion for provider events, and no polling trigger for providers that do not ship webhooks. Nango supports all of these on the same runtime, so one platform covers the full integration surface an AI product needs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which platform handles agent authorization better?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both handle per-user OAuth so an agent can act as a real user. Arcade focuses its product on this for its tool catalog. Nango handles auth across 800+ APIs with a drop-in white-label flow, supports OAuth, API keys, JWT, basic auth, and the MCP Auth standard, and uses the same auth layer to power tool calls, data syncs, and webhooks. For an AI agent that only calls a few catalog APIs, Arcade is enough; for a product that authenticates across many APIs and needs more than tool calls, Nango is broader. See &lt;a href="https://nango.dev/blog/best-ai-agent-authentication" rel="noopener noreferrer"&gt;best AI agent authentication platforms in 2026&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arcade.dev vs Nango: which is better for building API integrations for AI agents?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nango. For an engineer building API integrations for AI agents, Nango is the better choice: it covers every integration pattern an agent needs (tool calls, MCP, data syncs for RAG, webhooks, and triggers) on one runtime, and coding agents like Claude Code and Cursor build and customize those integrations in your repo across 800+ APIs. Arcade.dev is limited to MCP tool calling against its catalog, with no data syncs, no webhooks, and no coding-agent build loop. Pick Arcade only when tool calling is your agent’s entire scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Arcade.dev is a good choice for wiring an AI agent to a catalog of pre-built tools for an internal or personal-productivity agent whose main scope is tool calling.&lt;/p&gt;

&lt;p&gt;Nango is the integration platform you pick when your AI agent is a core part of a product you ship to customers. Coding agents build the integrations in your repo across 800+ APIs. The same runtime exposes custom tool calls, an MCP server, durable data syncs, webhooks, white-label auth, and deep observability. The build side is the differentiator now that every platform ships an MCP server, and Nango is the one where the code your agent writes today runs unmodified in a hardened, tenant-isolated runtime tomorrow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-agentic-api-integrations-platform" rel="noopener noreferrer"&gt;Best agentic API integrations platform in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/composio-vs-nango" rel="noopener noreferrer"&gt;Composio vs Nango: a developer’s comparison for production AI agent integrations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-api-integration-platforms-claude-code-cursor-codex" rel="noopener noreferrer"&gt;Best API integration platforms to use with Claude Code, Cursor, and Codex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-ai-agent-authentication" rel="noopener noreferrer"&gt;Best AI agent authentication platforms in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/build-reliable-tool-calls-for-ai-agents-integrating-with-external-apis" rel="noopener noreferrer"&gt;Build reliable tool calls for AI agents integrating with external APIs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>arcade</category>
      <category>api</category>
      <category>mcp</category>
    </item>
    <item>
      <title>3 best API integration skills for Claude and Codex in 2026</title>
      <dc:creator>Sapnesh Naik</dc:creator>
      <pubDate>Tue, 23 Jun 2026 17:44:14 +0000</pubDate>
      <link>https://dev.to/nangohq/3-best-api-integration-skills-for-claude-and-codex-in-2026-48o0</link>
      <guid>https://dev.to/nangohq/3-best-api-integration-skills-for-claude-and-codex-in-2026-48o0</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Coding agents write code well but build API integrations poorly on their own. They refer to old training data, invent endpoints and parameters, skip token refresh and pagination, and ship code that compiles but fails in production. A good API integration skill closes that gap: it encodes the patterns, points the agent at a way to test against the real API, and deploys to a runtime.&lt;/p&gt;

&lt;p&gt;The skills compared here:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Nango Function Builder skill (local):&lt;/strong&gt; Build full integrations as code in your repo with any of 18+ coding agents, test against a real connection with &lt;code&gt;nango dryrun&lt;/code&gt;, then deploy to Nango’s runtime. Broadest option.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nango remote function builder:&lt;/strong&gt; The same skill over the Functions API, with no local project. An agent (inside your product) builds, tests, and deploys an integration straight from a prompt. This is how &lt;a href="https://nango.dev/blog/just-in-time-integrations" rel="noopener noreferrer"&gt;just-in-time integrations&lt;/a&gt; work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prismatic Skills for Claude Code:&lt;/strong&gt; Builds Prismatic low-code workflow integrations from Claude Code. Claude Code only, and tied to the Prismatic platform.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What is a skill?
&lt;/h2&gt;

&lt;p&gt;A skill is a packaged capability for a coding agent like Claude. Skills contain instructions, plus optional bundled scripts and reference files the agent loads when needed.&lt;/p&gt;

&lt;p&gt;Anthropic introduced &lt;a href="https://www.anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills" rel="noopener noreferrer"&gt;Agent Skills&lt;/a&gt; in October, 2025, and published the format as an open standard. OpenAI then added native &lt;a href="https://developers.openai.com/codex/skills" rel="noopener noreferrer"&gt;Agent Skills to Codex&lt;/a&gt; using the same &lt;code&gt;SKILL.md&lt;/code&gt; format, and treats skills as the recommended way to give Codex reusable instructions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why coding agents need skills to build API integrations
&lt;/h2&gt;

&lt;p&gt;Coding agents are good at writing code, but building a production API integration is difficult.&lt;/p&gt;

&lt;p&gt;In a 2025 study benchmarking LLMs on web API integration tasks, models &lt;a href="https://arxiv.org/abs/2509.20172" rel="noopener noreferrer"&gt;hallucinated endpoint URLs up to 39% of the time and parameter names up to 31% of the time&lt;/a&gt;, and none of the open-source models tested solved more than 40% of the tasks. The same pattern shows up in dependencies: a &lt;a href="https://www.usenix.org/conference/usenixsecurity25/presentation/spracklen" rel="noopener noreferrer"&gt;2025 USENIX Security study of 576,000 generated code samples&lt;/a&gt; found that 19.7% of the packages the models recommended did not exist.&lt;/p&gt;

&lt;p&gt;There is also the part that is not code at all. A real integration has to handle OAuth and token refresh, pagination, retries, rate limits, webhook delivery, incremental syncs, and observability. An agent can write a &lt;code&gt;fetch&lt;/code&gt; call, but it cannot reliably reproduce the infrastructure that keeps that call working across providers and customers. Code that compiles is not an integration that runs in production.&lt;/p&gt;

&lt;p&gt;A skill addresses the first problem by encoding procedural knowledge: the patterns, decision trees, and provider quirks an experienced integration engineer already carries.&lt;/p&gt;

&lt;p&gt;But a skill on its own is still not enough. Two things separate a skill that produces a working integration from one that produces a plausible draft:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A test loop against the real API:&lt;/strong&gt; The agent needs to run its code against a real connection, read the actual response or error, and iterate. Without that loop, it guesses, and the 39% endpoint-hallucination rate is what you get.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A runtime to deploy to:&lt;/strong&gt; Auth, scaling, webhook ingestion, and logging have to live somewhere. A skill that ends at “here is some code” leaves you to build and operate all of that yourself.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How we evaluated these skills
&lt;/h2&gt;

&lt;p&gt;Each skill is scored on the questions that decide whether an agent ships a working integration or a draft:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Does it build a real integration as code?&lt;/strong&gt; Auth, actions, syncs, triggers and webhooks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Does it work with all coding agents?&lt;/strong&gt; A cross-agent skill fits whatever your team already uses; a single-agent skill locks you in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Does it test against a real provider API?&lt;/strong&gt; With real credentials and real responses, so the agent iterates on actual errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Does it deploy to a managed runtime?&lt;/strong&gt; Or does it leave you to host, scale, and monitor the result.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Does it cover the run side too?&lt;/strong&gt; A built-in MCP server and typed tool calls, so the agents in your product can consume what was built.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is it open and portable?&lt;/strong&gt; Open-standard skill format, open-source platform, integration code you own.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The 3 best API integration skills for Claude and Codex
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Nango Function Builder skill (local)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://nango.dev" rel="noopener noreferrer"&gt;Nango&lt;/a&gt; is the integration platform where coding agents build integrations. Agents like Claude Code and Codex, write integrations as code in your repo. Nango’s cloud runtime runs them securely and at scale, covering &lt;a href="https://nango.dev/docs/guides/auth/auth-guide" rel="noopener noreferrer"&gt;API auth&lt;/a&gt;, tool calls, &lt;a href="https://nango.dev/docs/implementation-guides/use-cases/syncs/implement-a-sync" rel="noopener noreferrer"&gt;data syncs&lt;/a&gt;, and &lt;a href="https://nango.dev/docs/implementation-guides/use-cases/webhooks-from-external-apis" rel="noopener noreferrer"&gt;webhooks&lt;/a&gt; across &lt;a href="https://nango.dev/api-integrations" rel="noopener noreferrer"&gt;800+ APIs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The local Function Builder skill is the build side of that platform. Install it once and it works across all &lt;a href="https://nango.dev/docs/getting-started/coding-agent-setup" rel="noopener noreferrer"&gt;coding agents&lt;/a&gt;, including Claude Code, Codex, Cursor, Gemini CLI, and OpenCode. The agent researches the API, writes the integration as a code function, tests it against a real connection, and iterates on real errors until it passes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmgi3aosyu0u43vkvc0f.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkmgi3aosyu0u43vkvc0f.gif" alt="Claude Code building a Google Calendar action with the Nango Function Builder skill" width="600" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams that want a coding agent to build and ship production integrations against any API, with one skill that covers auth, actions, syncs, and webhooks, and a runtime that exposes them to the agents inside their product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One skill, 18+ agents:&lt;/strong&gt; A single install gives Claude Code, Codex, Cursor, Gemini CLI, OpenCode, and others the same context to research an API, write the integration, and test it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests against the real API:&lt;/strong&gt; &lt;code&gt;nango dryrun&lt;/code&gt; runs generated code against a real connection, returns the real response, and lets the agent fix real errors. This is the test loop most agents lack, and it is what closes the endpoint-hallucination gap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploys to a managed runtime:&lt;/strong&gt; The same code runs unmodified in a tenant-isolated runtime with &lt;a href="https://nango.dev/docs/implementation-guides/platform/auth/implement-api-auth" rel="noopener noreferrer"&gt;managed auth&lt;/a&gt; (OAuth, API keys, JWT, basic auth, MCP Auth), durable &lt;a href="https://nango.dev/docs/implementation-guides/use-cases/syncs/checkpoints" rel="noopener noreferrer"&gt;syncs&lt;/a&gt; that resume across millions of records, and webhook ingestion at scale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Covers the run side:&lt;/strong&gt; Every action is exposed as a typed &lt;a href="https://nango.dev/docs/implementation-guides/use-cases/tool-calling/overview" rel="noopener noreferrer"&gt;tool call&lt;/a&gt; over REST and a built-in &lt;a href="https://nango.dev/docs/implementation-guides/use-cases/tool-calling/implement-mcp-server" rel="noopener noreferrer"&gt;MCP server&lt;/a&gt;, so the AI agents in your product consume what the coding agent built.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observability the agent can read:&lt;/strong&gt; Full request and response logs with &lt;a href="https://nango.dev/docs/guides/platform/observability" rel="noopener noreferrer"&gt;OpenTelemetry export&lt;/a&gt;, so a coding agent can read a failing run and ship a fix on its own.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open and reviewable:&lt;/strong&gt; The &lt;a href="https://github.com/NangoHQ/nango" rel="noopener noreferrer"&gt;platform is open source&lt;/a&gt;, integrations are code in your repo under normal review and CI/CD, and you keep your customers’ tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Needs Nango account:&lt;/strong&gt; You need to create a free Nango account to try this Skill.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To try it, install the Nango CLI, scaffold an integrations folder, then add the skill:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add NangoHQ/skills &lt;span class="nt"&gt;-s&lt;/span&gt; building-nango-functions-locally
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then describe the integration in plain English and invoke the skill:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/building-nango-functions-locally Build a Nango action that fetches the last 5 emails
from the Gmail address passed as a parameter, returning subject, timestamp, and plaintext body.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent researches the Gmail API, writes the action, runs &lt;code&gt;nango dryrun &amp;lt;action&amp;gt; '&amp;lt;CONNECTION_ID&amp;gt;' -e dev&lt;/code&gt; against the real connection, and iterates until it works. See the end-to-end walkthroughs for &lt;a href="https://nango.dev/blog/how-to-build-a-real-time-google-calendar-api-integration" rel="noopener noreferrer"&gt;Google Calendar&lt;/a&gt; and &lt;a href="https://nango.dev/blog/build-a-github-api-integration-for-ai-agents" rel="noopener noreferrer"&gt;GitHub with Codex&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Nango remote function builder
&lt;/h3&gt;

&lt;p&gt;The remote function builder is the same Nango skill operating on &lt;a href="https://nango.dev/docs/guides/functions/functions-guide" rel="noopener noreferrer"&gt;REST API&lt;/a&gt; without a local project. This lets you build, test and deploy API integrations from chat only LLMs like Claude.ai, ChatGPT, or Gemini without the need to give access to your source code.&lt;/p&gt;

&lt;p&gt;This is what makes &lt;a href="https://nango.dev/blog/just-in-time-integrations" rel="noopener noreferrer"&gt;just-in-time integrations&lt;/a&gt; possible. You can pair the skill with an agent inside your product, so when a customer asks for an integration that does not exist yet, the agent builds it on demand, tests it, and deploys it for immediate use. The work shifts from building each integration by hand to running a factory that produces them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5yhk18gfl23c0wb0cwax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5yhk18gfl23c0wb0cwax.png" alt="How just-in-time integrations work: a customer prompt triggers a coding agent to read docs, build, dry run, and deploy an integration the product's AI agent then calls" width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Products that need integrations built on demand, straight from a prompt, by an agent rather than a human picking each one off a roadmap. Useful for integrations where the integration behavior depends on what the customer needs at that moment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No local project required:&lt;/strong&gt; Compile, dry run, and deploy over REST endpoints, so an agent with no checkout (including one running inside your product) can build a complete integration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-API testing still applies:&lt;/strong&gt; The remote dry run executes against a real connection, so the same test loop that grounds the local skill grounds the remote one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Powers per-customer integrations:&lt;/strong&gt; An agent builds the integration a customer asked for, deploys it, and the AI agents in your product call it minutes later, all on the same platform.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same runtime and auth:&lt;/strong&gt; Remote-built integrations run in the same tenant-isolated runtime, with the same managed auth and observability, as locally built ones.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Less suited to heavy source-control workflows:&lt;/strong&gt; When you want reviewable diffs and CI/CD as the primary path, the local skill is the better default. The remote builder shines for dynamic, on-demand, and in-product generation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Prismatic Skills for Claude Code
&lt;/h3&gt;

&lt;p&gt;Prismatic, an embedded iPaaS, launched Skills for Claude Code on May 4, 2026. It is a Claude Code plugin that helps you build for Prismatic’s low-code platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams that mainly want a low-code platform but want to speed up work using Claude code instead of the low-code UI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;End-to-end on Prismatic:&lt;/strong&gt; Scaffold, generate, compile, deploy, and test, all from the IDE.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backed by a dev MCP server:&lt;/strong&gt; A bundled MCP server gives the agent access to your Prismatic environment while it builds.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skill for a low-code platform&lt;/strong&gt;: Prismatic is mainly a low-code platform. So the agent skill it provides eventually translates down to their low-code schemas. This is not helpful if you’re looking for real code-based scalable integrations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code only:&lt;/strong&gt; No support for Codex, Cursor, Gemini CLI, or OpenCode. If your team uses anything other than Claude Code, the skill does not apply.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No free-standing real-API test loop:&lt;/strong&gt; The agent imports the integration into Prismatic and tests it inside Prismatic’s runner, and that path needs an already-authorized connection first. You lose the standalone dry run against the provider with your own tokens, where the agent iterates on real responses the way &lt;code&gt;nango dryrun&lt;/code&gt; allows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Comparison of API integration skills for Claude and Codex
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Nango (local)&lt;/th&gt;
&lt;th&gt;Nango (remote)&lt;/th&gt;
&lt;th&gt;Prismatic Skills&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Builds a full integration as code&lt;/td&gt;
&lt;td&gt;Yes (auth, actions, syncs, webhooks)&lt;/td&gt;
&lt;td&gt;Yes (auth, actions, syncs, webhooks)&lt;/td&gt;
&lt;td&gt;Yes (Prismatic workflows)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works with Claude Code&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Works with Codex&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-agent (18+ agents)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build with no local project (JIT)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tests against the real provider API&lt;/td&gt;
&lt;td&gt;Yes (&lt;code&gt;nango dryrun&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Yes (remote dry run)&lt;/td&gt;
&lt;td&gt;Partial (in Prismatic's runner)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Managed auth (OAuth, API keys, JWT)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Durable data syncs&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Webhook ingestion at scale&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deploys to a managed runtime&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes (Prismatic)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Built-in MCP server for consumption&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open-source platform&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Choosing the right skill
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;If you want a coding agent to build, test, and ship integrations end to end against any API, with one skill across Claude, Codex, and 16 other agents:&lt;/strong&gt; use the Nango Function Builder skill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If you want integrations built on demand from a prompt, including by an agent inside your product:&lt;/strong&gt; use the Nango remote function builder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If you are looking for low-code tools:&lt;/strong&gt; Prismatic Skills can speed up building Prismatic workflows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If your agent integrates with a long tail of APIs and you need the build side and the run side on one platform:&lt;/strong&gt; use Nango. The open-source &lt;a href="https://github.com/NangoHQ/integration-templates" rel="noopener noreferrer"&gt;integration templates&lt;/a&gt; and code-first model are built for the long tail.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between a skill and an MCP server for API integrations?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A skill teaches a coding agent how to build an integration at build time; an MCP server gives an AI agent access to that integration at run time. The two are complementary. You use a skill (like the Nango Function Builder skill) so Claude or Codex can author and test an integration, and an MCP server so the AI agents in your product can call it. A single platform can provide both, which is why Nango ships a build skill and a built-in MCP server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do API integration skills work with both Claude and Codex?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, because skills are an open standard. The Nango Function Builder skill works across 18+ agents, including Claude Code, Codex, Cursor, Gemini CLI, and OpenCode. Some vendor skills are narrower: Prismatic’s skill, for example, runs only in Claude Code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which coding agent is best for building API integrations?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The agent matters less than the skill and platform behind it. Claude Code, Codex, Cursor, Gemini CLI, and OpenCode are all capable of building API integrations when given a skill that encodes the patterns and a way to test against the real API. Across hundreds of integration builds, the differences between agents were small. See &lt;a href="https://nango.dev/blog/using-ai-coding-agents-for-building-api-integrations" rel="noopener noreferrer"&gt;using AI coding agents for building API integrations&lt;/a&gt; for the full comparison.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can a coding agent test an integration against a real API without leaking customer data?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. With Nango, the agent runs &lt;code&gt;nango dryrun&lt;/code&gt; against a sandbox or developer connection, gets real API responses, and iterates on real errors, while production tokens stay out of the agent’s reach. You can also issue a narrow-scoped API key so the agent’s build surface is isolated from the production runtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need to host my own MCP server to give agents API access?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not with Nango. The runtime and a built-in MCP server are managed for you, so the integrations a coding agent builds are immediately callable by the AI agents in your product without standing up new infrastructure. If you hand-build your own MCP server instead, you own its hosting, scaling, and maintenance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Using coding agents like Claude, Cursor and Codex to build API integrations significantly speeds up the work. But these coding agents need the right skills to build reliable API integrations.&lt;/p&gt;

&lt;p&gt;The skills enable your coding agent to hook into a provider platform like Nango and leverage the integrations infra for Auth, Syncs, Webhooks and triggers to build production-ready integrations. &lt;/p&gt;

&lt;p&gt;Nango Function Builder local and remote skills are great examples of this. If you want to try it with your favorite coding agent, follow the &lt;a href="https://nango.dev/docs/guides/primitives/functions" rel="noopener noreferrer"&gt;Nango functions guide&lt;/a&gt; to get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-api-integration-platforms-claude-code-cursor-codex" rel="noopener noreferrer"&gt;Best API integration platforms to use with Claude Code, Cursor, and Codex (2026)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-embedded-ipaas-for-just-in-time-api-integrations" rel="noopener noreferrer"&gt;Best embedded iPaaS for just-in-time API integrations in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/using-ai-coding-agents-for-building-api-integrations" rel="noopener noreferrer"&gt;Using AI coding agents for building API integrations in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/just-in-time-integrations" rel="noopener noreferrer"&gt;The emergence of just-in-time integrations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/nango-api-integrations-builder-skill" rel="noopener noreferrer"&gt;Introducing the Nango API integrations builder skill&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>claude</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Build a GitHub API integration for AI agents using Nango</title>
      <dc:creator>Sapnesh Naik</dc:creator>
      <pubDate>Wed, 17 Jun 2026 18:01:20 +0000</pubDate>
      <link>https://dev.to/nangohq/build-a-github-api-integration-for-ai-agents-using-nango-1ei</link>
      <guid>https://dev.to/nangohq/build-a-github-api-integration-for-ai-agents-using-nango-1ei</guid>
      <description>&lt;p&gt;This guide shows how to build a custom, customer-facing GitHub API integration that the AI agents in your product can act on, using &lt;a href="https://nango.dev" rel="noopener noreferrer"&gt;Nango&lt;/a&gt; and an AI coding agent (Codex, Claude Code, Cursor, or any other).&lt;/p&gt;

&lt;p&gt;By the end of this guide, you will have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The ability for an AI agent in your product to create issues, comment on pull requests, and open PRs on a customer’s repositories, exposed as typed &lt;a href="https://nango.dev/docs/guides/functions/tool-calling" rel="noopener noreferrer"&gt;MCP tool calls&lt;/a&gt; instead of raw GitHub API parameters.&lt;/li&gt;
&lt;li&gt;A GitHub &lt;a href="https://nango.dev/docs/guides/auth/auth-guide" rel="noopener noreferrer"&gt;auth UI&lt;/a&gt; in your product (Nango Connect) so your customers can connect their own GitHub account or install your GitHub App.&lt;/li&gt;
&lt;li&gt;A durable sync that imports issues and pull requests from a customer’s repositories and keeps them up to date, so the agent always reasons over current data.&lt;/li&gt;
&lt;li&gt;A signature-verified webhook handler that reacts to GitHub events (pushes, pull requests, issues) in real time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hfx9s58epsupa3bllyr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hfx9s58epsupa3bllyr.gif" alt="Building a customer-facing GitHub API integration with Nango and an AI coding agent" width="600" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Get the working example:&lt;/strong&gt; the complete demo (frontend, backend, nango-integrations) is on GitHub at &lt;a href="https://github.com/NangoHQ/github-api-integration" rel="noopener noreferrer"&gt;NangoHQ/github-api-integration&lt;/a&gt;. Clone it to run the whole thing end to end, or follow the guide below and let Codex generate the same functions in your own project.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is a GitHub API integration?
&lt;/h2&gt;

&lt;p&gt;A GitHub API integration connects your application or agent to a customer’s GitHub data (repositories, issues, pull requests, and commits) through GitHub’s REST and GraphQL APIs. It authenticates as a GitHub App or an OAuth App, reads data into your app with scheduled syncs, writes back with actions like creating issues or commenting on pull requests, and reacts to repository events through webhooks.&lt;/p&gt;

&lt;p&gt;Example use cases: an AI agent that triages a customer’s issues and opens pull requests, an AI code-review product that comments on PRs, a project management tool that mirrors a customer’s issues, or a developer analytics dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is it hard to integrate the GitHub API into your app?
&lt;/h2&gt;

&lt;p&gt;The GitHub REST API exposes repositories, issues, pull requests, commits, and webhooks. A production integration on top of it takes a few decisions up front, plus the infrastructure to keep them running.&lt;/p&gt;

&lt;p&gt;The first is the auth type. For a customer-facing product, a GitHub App is usually the right call; reach for an OAuth App only when you are building a personal-developer tool that should act purely as the user.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;GitHub App&lt;/th&gt;
&lt;th&gt;OAuth App&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Acts as&lt;/td&gt;
&lt;td&gt;A bot/installation&lt;/td&gt;
&lt;td&gt;The authorizing user&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fine-grained permissions&lt;/td&gt;
&lt;td&gt;Yes, per resource&lt;/td&gt;
&lt;td&gt;No, inherits the user's scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rate limit&lt;/td&gt;
&lt;td&gt;5,000 to 12,500/hour (scales with org)&lt;/td&gt;
&lt;td&gt;5,000/hour&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repository access&lt;/td&gt;
&lt;td&gt;Only repos granted at install&lt;/td&gt;
&lt;td&gt;Every repo the user can access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for&lt;/td&gt;
&lt;td&gt;Customer-facing products&lt;/td&gt;
&lt;td&gt;Personal-developer tools&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;See &lt;a href="https://nango.dev/blog/github-app-vs-github-oauth" rel="noopener noreferrer"&gt;GitHub App vs. GitHub OAuth&lt;/a&gt; and GitHub’s own &lt;a href="https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/differences-between-github-apps-and-oauth-apps" rel="noopener noreferrer"&gt;comparison&lt;/a&gt; for the full breakdown. The rest of the work is infrastructure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The auth flow is not standard OAuth, and tokens are short-lived:&lt;/strong&gt; GitHub App installation tokens expire after one hour. When “Expire user authorization tokens” is enabled (the default), user access tokens &lt;a href="https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/refreshing-user-access-tokens" rel="noopener noreferrer"&gt;expire after 8 hours and refresh tokens after 6 months&lt;/a&gt;. A failed refresh shows up as the &lt;a href="https://nango.dev/blog/github-app-oauth-refresh-token-bad-refresh-token" rel="noopener noreferrer"&gt;&lt;code&gt;BAD_REFRESH_TOKEN&lt;/code&gt;&lt;/a&gt; error, usually after a rotated client secret or a revoked installation. Someone has to store, refresh, and encrypt all of this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Issues API also returns pull requests:&lt;/strong&gt; &lt;code&gt;GET /repos/{owner}/{repo}/issues&lt;/code&gt; returns both issues and PRs, and every pull request carries a &lt;a href="https://docs.github.com/en/rest/issues/issues" rel="noopener noreferrer"&gt;&lt;code&gt;pull_request&lt;/code&gt;&lt;/a&gt; field. Filter on it or you double-count.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webhooks need signature verification:&lt;/strong&gt; GitHub signs each delivery with the &lt;a href="https://docs.github.com/en/webhooks/using-webhooks/validating-webhook-deliveries" rel="noopener noreferrer"&gt;&lt;code&gt;X-Hub-Signature-256&lt;/code&gt;&lt;/a&gt; header (an HMAC-SHA256 of the raw body using your webhook secret). You verify it with a constant-time comparison before trusting the payload, and read the event type from &lt;code&gt;X-GitHub-Event&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pagination is header-driven:&lt;/strong&gt; REST responses page through the &lt;code&gt;Link&lt;/code&gt; header (&lt;code&gt;rel="next"&lt;/code&gt;, up to 100 items per page), and some data is only practical through GitHub’s GraphQL API, which has its own point budget.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Building all of this by hand takes weeks. With Nango and a coding agent like Codex, the same GitHub API integration ships in about an hour, the same workflow we used to &lt;a href="https://nango.dev/blog/learned-building-200-api-integrations-with-opencode" rel="noopener noreferrer"&gt;build 200+ integrations across five APIs in 15 minutes&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use Nango for a GitHub API integration
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://nango.dev/" rel="noopener noreferrer"&gt;Nango&lt;/a&gt; is the integration platform where coding agents build API integrations. An agent like Codex writes the integration as code in your repo, and Nango’s runtime runs it with managed auth, retries, and observability across &lt;a href="https://nango.dev/api-integrations" rel="noopener noreferrer"&gt;800+ APIs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For a GitHub integration, we will use these Nango features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Managed auth for GitHub Apps and OAuth:&lt;/strong&gt; your product gets a customizable, white-label &lt;a href="https://nango.dev/docs/guides/auth/auth-guide" rel="noopener noreferrer"&gt;auth UI&lt;/a&gt; where customers install your &lt;a href="https://nango.dev/docs/api-integrations/github-app" rel="noopener noreferrer"&gt;GitHub App&lt;/a&gt; or authorize a &lt;a href="https://nango.dev/docs/api-integrations/github" rel="noopener noreferrer"&gt;GitHub OAuth&lt;/a&gt; app, while Nango handles installation and user tokens, refresh, encryption, and revocation behind it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A function builder skill for Codex:&lt;/strong&gt; to build your integration logic, Codex uses the Nango &lt;a href="https://nango.dev/docs/guides/functions/functions-guide#option-2-build-locally-with-the-cli" rel="noopener noreferrer"&gt;function builder skill&lt;/a&gt;. It researches the GitHub API, writes your actions and syncs from a prompt, tests them against a real GitHub connection, and iterates on real errors until its tests pass against your connection. The same skill works with Claude Code, Cursor, Gemini CLI, and other agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrations infrastructure for every use case:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nango.dev/docs/guides/functions/action-functions" rel="noopener noreferrer"&gt;Actions&lt;/a&gt;: one-off operations like creating an issue, commenting on a PR, or opening a pull request.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nango.dev/docs/guides/functions/syncs/sync-functions" rel="noopener noreferrer"&gt;Syncs&lt;/a&gt;: scheduled functions that keep issues, PRs, and commits flowing into your app.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nango.dev/docs/getting-started/use-cases/webhooks-from-external-apis" rel="noopener noreferrer"&gt;Webhooks&lt;/a&gt;: receive GitHub events, verified, and route them to your integration in real time.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nango.dev/docs/guides/functions/tool-calling" rel="noopener noreferrer"&gt;MCP server&lt;/a&gt;: exposes your deployed actions as typed tools for the AI agents in your product.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nango.dev" rel="noopener noreferrer"&gt;Sign up for Nango&lt;/a&gt; (the free tier is enough for development).&lt;/li&gt;
&lt;li&gt;Add GitHub as an integration. Nango supports all the various GitHub auth types. In this demo, we’ll be registering a new &lt;a href="https://nango.dev/docs/api-integrations/github/how-to-set-up-a-github-app-with-nango" rel="noopener noreferrer"&gt;GitHub App&lt;/a&gt; (the “GitHub App OAuth” type, integration ID &lt;code&gt;github-app-oauth&lt;/code&gt;) with Nango’s callback URL &lt;code&gt;https://api.nango.dev/oauth/callback&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1xlhtxbor4mpn7q72624.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1xlhtxbor4mpn7q72624.png" alt="Configuring a GitHub App OAuth integration in the Nango dashboard with App ID, client ID, client secret, and private key" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a test connection: on the Nango dashboard, open the integration and select Connections &amp;gt; Add Test Connection, then authorize a GitHub account that owns a repository with a few issues and pull requests. While Codex builds your integration, it runs the generated code against this connection, so what ships has already worked against real data.&lt;/li&gt;
&lt;li&gt;Give Codex a project to build in. Install the &lt;a href="https://nango.dev/docs/reference/functions/functions-cli" rel="noopener noreferrer"&gt;Nango CLI&lt;/a&gt; and run &lt;code&gt;nango init&lt;/code&gt;: it creates a &lt;code&gt;nango-integrations&lt;/code&gt; folder with the Nango framework bootstrapped. Set &lt;code&gt;NANGO_SECRET_KEY_DEV&lt;/code&gt; (your dev API key, from Environment Settings in the dashboard) in &lt;code&gt;nango-integrations/.env&lt;/code&gt; so it can test and deploy on your behalf.&lt;/li&gt;
&lt;li&gt;Install the Nango skill. Run &lt;code&gt;npx skills add NangoHQ/skills -s building-nango-functions-locally&lt;/code&gt;; the installer detects Codex and copies the skill to &lt;code&gt;.agents/skills/&lt;/code&gt;, where &lt;a href="https://developers.openai.com/codex/skills" rel="noopener noreferrer"&gt;Codex discovers it&lt;/a&gt;. The same skill works with Claude Code, Cursor, and &lt;a href="https://nango.dev/docs/getting-started/coding-agent-setup" rel="noopener noreferrer"&gt;other coding agents&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; LLM training data on Nango is often stale. Add the Nango docs MCP server alongside the skill so Codex pulls current API references while it generates code: &lt;code&gt;codex mcp add nango-docs --url "https://nango.dev/docs/mcp"&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sync a customer’s issues and pull requests into your app
&lt;/h2&gt;

&lt;p&gt;A &lt;a href="https://nango.dev/docs/guides/functions/syncs/sync-functions" rel="noopener noreferrer"&gt;sync&lt;/a&gt; keeps a fresh copy of a customer’s GitHub data in your app. Here it imports the issues and pull requests from a connected repository, then refreshes on a schedule so new activity shows up without anyone clicking refresh.&lt;/p&gt;

&lt;p&gt;You build it by prompting Codex with the Nango skill (type &lt;code&gt;$&lt;/code&gt; to mention a skill, or run &lt;code&gt;/skills&lt;/code&gt; to browse):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$building-nango-functions-locally Build a Nango sync for the github-app-oauth integration that imports
the issues and pull requests from the repos a customer connects and keeps them up to date,
refreshing every hour. Integrate it with my frontend.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2b24stgxsp87f3lym8dr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2b24stgxsp87f3lym8dr.gif" alt="Codex generating a Nango sync for GitHub issues and pull requests with the function builder skill" width="720" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the skill loaded, Codex:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Researches the GitHub API and the endpoints it needs.&lt;/li&gt;
&lt;li&gt;Writes the sync and a typed model for your records.&lt;/li&gt;
&lt;li&gt;Tests it against your real connection with &lt;code&gt;nango dryrun&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Iterates on any errors until the sync works end to end.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Codex generates this sync. You do not write it by hand.&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;createSync&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Imports issues and pull requests from a connected repo and refreshes hourly.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;frequency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;every hour&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;autoStart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// starts once your app saves the repo metadata&lt;/span&gt;
    &lt;span class="na"&gt;models&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;GithubIssue&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;owner&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;repo&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getMetadata&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;await &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;issues&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;paginate&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`/repos/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;owner&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;repo&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/issues`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;all&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;updated&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;per_page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;100&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;}))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// GET /issues returns pull requests too; the pull_request field tells them apart.&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;batchSave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;issues&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;toRecord&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GithubIssue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;nango.paginate&lt;/code&gt; follows GitHub’s &lt;code&gt;Link&lt;/code&gt; header for you, so you do not hand-roll pagination. The full sync, with the record model, incremental updates keyed on issue activity, and the &lt;code&gt;onWebhook&lt;/code&gt; handler, is in &lt;a href="https://github.com/NangoHQ/github-api-integration/blob/main/nango-integrations/github-app-oauth/syncs/fetch-issues-and-pull-requests.ts" rel="noopener noreferrer"&gt;&lt;code&gt;fetch-issues-and-pull-requests.ts&lt;/code&gt;&lt;/a&gt; in the demo repo.&lt;/p&gt;

&lt;p&gt;When Codex finishes, it deploys the sync for you (approve the deploy when it asks):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nango deploy &lt;span class="nt"&gt;--sync&lt;/span&gt; fetch-issues-and-pull-requests dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because the prompt said to integrate the frontend, Codex also wires &lt;a href="https://nango.dev/docs/guides/auth/auth-guide" rel="noopener noreferrer"&gt;Nango Connect&lt;/a&gt; into your app: customers install your GitHub App, pick which repositories to grant, and the sync starts on its own.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F95xq584rvo3n5sqz6igw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F95xq584rvo3n5sqz6igw.gif" alt="A customer connecting GitHub through Nango Connect and the sync importing their issues into the app" width="720" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your backend reads the synced records from Nango’s cache and serves them to your UI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;records&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listRecords&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;providerConfigKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;github-app-oauth&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;connectionId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;GithubIssue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Run the issues sync on demand
&lt;/h3&gt;

&lt;p&gt;Syncs run on a schedule (every hour in this example). When a customer wants fresh data immediately, give them a refresh button that triggers the sync on demand (behind the scenes, a &lt;code&gt;nango.triggerSync&lt;/code&gt; call) instead of waiting for the next run. The refresh endpoint that triggers the sync is in &lt;a href="https://github.com/NangoHQ/github-api-integration/blob/main/backend/server.mjs" rel="noopener noreferrer"&gt;&lt;code&gt;backend/server.mjs&lt;/code&gt;&lt;/a&gt; in the demo repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create issues and comment on pull requests from your app
&lt;/h2&gt;

&lt;p&gt;An &lt;a href="https://nango.dev/docs/guides/functions/action-functions" rel="noopener noreferrer"&gt;action&lt;/a&gt; is a one-off operation your product or an agent triggers on demand. This is the write-back direction: an AI agent files an issue from a support ticket, posts a review summary on a pull request, or opens a fix PR. Prompt Codex to build it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$building-nango-functions-locally Add an action to the github-app-oauth integration that creates an issue
in a customer's repo from a typed title, body, and labels.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpb9vs6x1mvbzm9q0q8ha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpb9vs6x1mvbzm9q0q8ha.png" alt="Codex in the IDE building and verifying the create-issue action for the GitHub integration" width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Codex writes the action, tests it by opening a real issue in your connected test repository, and deploys it when you approve. The full action is in &lt;a href="https://github.com/NangoHQ/github-api-integration/blob/main/nango-integrations/github-app-oauth/actions/create-issue.ts" rel="noopener noreferrer"&gt;&lt;code&gt;create-issue.ts&lt;/code&gt;&lt;/a&gt; in the demo repo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Codex generates this action; approve the deploy when it asks.&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;createAction&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Create an issue in the connected repo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;retries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// creating an issue is not idempotent; a blind retry could open a duplicate&lt;/span&gt;
    &lt;span class="na"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`/repos/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;owner&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;repo&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/issues`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;labels&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;number&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;html_url&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On &lt;code&gt;retries: 0&lt;/code&gt;: creating an issue is not idempotent, so re-running the whole action after an unknown failure could open the same issue twice. Rate-limited requests are safe because they wrote nothing, and Nango’s proxy retries those for you.&lt;/p&gt;

&lt;p&gt;Deploy it the same way (Approve when Codex asks to deploy):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nango deploy &lt;span class="nt"&gt;--action&lt;/span&gt; create-issue dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2zige0392ts40kjth8gx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2zige0392ts40kjth8gx.png" alt="Deployed GitHub actions in the Nango dashboard: create-issue, create-comment, create-pull-request, and more, with enable toggles" width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Commenting on a pull request uses the same shape. In GitHub, a pull request is also an issue, so a comment posts to &lt;code&gt;/repos/{owner}/{repo}/issues/{number}/comments&lt;/code&gt; whether the number points at an issue or a PR. One more prompt adds an &lt;code&gt;add-issue-comment&lt;/code&gt; action, and a third opens a pull request from a branch with &lt;code&gt;POST /repos/{owner}/{repo}/pulls&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$building-nango-functions-locally Add actions to the github-app-oauth integration to comment on an issue
or PR, and to open a pull request from a head branch into a base branch.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can test any action from your app, or run it from the Nango dashboard with the &lt;a href="https://nango.dev/docs/updates/changelog#playground" rel="noopener noreferrer"&gt;Playground&lt;/a&gt; against your connection.&lt;/p&gt;

&lt;h2&gt;
  
  
  React to GitHub events in real time with webhooks
&lt;/h2&gt;

&lt;p&gt;A scheduled sync is enough for most data, but GitHub is event-rich, and a lot of products need to react the moment a pull request opens or an issue changes. GitHub Apps deliver one &lt;a href="https://nango.dev/docs/getting-started/use-cases/webhooks-from-external-apis" rel="noopener noreferrer"&gt;webhook&lt;/a&gt; stream for the events you subscribe to (push, pull_request, issues, and more).&lt;/p&gt;

&lt;p&gt;Nango receives those webhooks, verifies the &lt;code&gt;X-Hub-Signature-256&lt;/code&gt; signature against your webhook secret, and forwards the verified event to your integration, so you do not write HMAC code. Prompt Codex to wire it up:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$building-nango-functions-locally Subscribe the github-app-oauth integration to pull_request and issues
webhook events and update the synced records as soon as events arrive.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvur7fu7soa86fxfqqehl.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvur7fu7soa86fxfqqehl.gif" alt="Codex subscribing the GitHub integration to pull_request and issues webhook events" width="720" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Keep the hourly sync running as a backstop. Webhook deliveries can be missed (a transient outage, a paused delivery), and a scheduled re-sync catches anything the event stream dropped. The combination of verified webhooks for freshness and a periodic sync for completeness is the pattern most production GitHub integrations settle on.&lt;/p&gt;

&lt;p&gt;One manual step is needed to start receiving events: point your GitHub App at Nango’s webhook URL. Copy it from your integration’s settings page in the Nango dashboard, then paste it into your GitHub App under Developer settings &amp;gt; GitHub Apps &amp;gt; your app &amp;gt; Webhook URL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F69x9ww2ynkadxh6xzmt2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F69x9ww2ynkadxh6xzmt2.png" alt="Copying the webhook URL from the Nango integration settings into the GitHub App's webhook configuration" width="799" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Give AI agents in your product access to GitHub
&lt;/h2&gt;

&lt;p&gt;This is where the previous steps pay off: the sync gives the agent current GitHub data to reason over, and the actions become the tools it acts with. Once they are deployed, the AI agents inside your product can use them. Nango exposes enabled actions as typed tool calls through a hosted &lt;a href="https://nango.dev/docs/guides/functions/tool-calling" rel="noopener noreferrer"&gt;MCP server&lt;/a&gt;, so an agent calls &lt;code&gt;create-issue&lt;/code&gt; or &lt;code&gt;add-issue-comment&lt;/code&gt; with typed inputs instead of guessing raw GitHub API parameters.&lt;/p&gt;

&lt;p&gt;Point your MCP client at Nango’s server (Streamable HTTP transport) and pass three values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Authorization:        Bearer &amp;lt;YOUR-NANGO-SECRET-KEY&amp;gt;
provider-config-key:  github-app-oauth
connection-id:        &amp;lt;CONNECTION-ID&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Authorization:&lt;/strong&gt; your Nango secret key, held by your backend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;provider-config-key:&lt;/strong&gt; your GitHub integration ID (&lt;code&gt;github-app-oauth&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;connection-id:&lt;/strong&gt; the connection for the current user. Fetch it per logged-in user rather than hardcoding it, so each user’s agent acts on their own repositories.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Codex can wire this into your product’s agent for you:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$building-nango-functions-locally Wire my product's AI agent to Nango's MCP server for the github-app-oauth
integration, passing the logged-in user's connection id, so it can read issues and open PRs. Add flexible actions to Nango to make the agent feature complete
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2cx80cag9qwpegxfqwmr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2cx80cag9qwpegxfqwmr.png" alt="An AI agent in a product using Nango MCP tools to create issues, close issues, and add labels, reflected live on GitHub" width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you do not have an agent interface in your product yet but want to try the tools, add Nango’s MCP server to Codex itself. &lt;code&gt;codex mcp add&lt;/code&gt; does not support custom headers, so add it to &lt;code&gt;~/.codex/config.toml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[mcp_servers.nango_github]&lt;/span&gt;
&lt;span class="py"&gt;url&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"https://api.nango.dev/mcp"&lt;/span&gt;
&lt;span class="py"&gt;bearer_token_env_var&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"NANGO_SECRET_KEY"&lt;/span&gt;
&lt;span class="py"&gt;http_headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;"connection-id"&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;CONNECTION-ID&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;"provider-config-key"&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"github-app-oauth"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then ask Codex: “Open an issue titled ‘Flaky test in checkout’ in my connected repo using the nango github MCP.” For the patterns that make these tool calls reliable in production, see &lt;a href="https://nango.dev/blog/build-reliable-tool-calls-for-ai-agents-integrating-with-external-apis" rel="noopener noreferrer"&gt;build reliable tool calls for AI agents&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; you can view detailed action and sync logs on the Nango dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foorbbw1jyl97xlnbcbzs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foorbbw1jyl97xlnbcbzs.png" alt="The Nango dashboard logs showing successful action, sync, and webhook runs for the GitHub integration" width="799" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Common issues
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Issue&lt;/th&gt;
&lt;th&gt;Cause and fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;401 Bad credentials&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The token expired or the installation was revoked. Nango refreshes installation tokens (1 hour) and user tokens (8 hours) for you; if the customer removed the installation, they reconnect from your app.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;BAD_REFRESH_TOKEN&lt;/code&gt; on a user token&lt;/td&gt;
&lt;td&gt;The client secret was rotated or the installation was revoked. The customer reconnects. See the full breakdown.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;403&lt;/code&gt; or &lt;code&gt;429&lt;/code&gt; with &lt;code&gt;retry-after&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;A primary or secondary rate limit (100 concurrent requests, 900 points per minute). Nango retries with backoff; spread bulk work and avoid firing parallel requests at one installation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Issue sync contains pull requests&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;GET /issues&lt;/code&gt; returns PRs too. Filter on the &lt;code&gt;pull_request&lt;/code&gt; field to keep them separate.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Webhook rejected or ignored&lt;/td&gt;
&lt;td&gt;The &lt;code&gt;X-Hub-Signature-256&lt;/code&gt; HMAC did not match. Confirm the webhook secret on your GitHub App matches the one in Nango; Nango verifies the signature for you.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;404&lt;/code&gt; on a repo the user can see&lt;/td&gt;
&lt;td&gt;The GitHub App installation was not granted that repository. The customer adds it under the installation's repository access settings.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Endpoint returns &lt;code&gt;Not Found&lt;/code&gt; only for a GitHub App&lt;/td&gt;
&lt;td&gt;Some endpoints work only with OAuth Apps. Check for the "Works with GitHub Apps" note on the endpoint in GitHub's docs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;listRecords&lt;/code&gt; is empty right after connecting&lt;/td&gt;
&lt;td&gt;The sync starts only after your app saves the repo metadata, and the first run is asynchronous. Read records once a run completes.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Should I use a GitHub App or an OAuth App for a customer-facing product?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use a GitHub App. It installs per organization or repository with fine-grained permissions and rate limits that scale from 5,000 to 12,500 requests per hour. An OAuth App acts as the authorizing user and suits personal-developer tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do you handle GitHub API rate limits when syncing data?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub allows 5,000 to 12,500 requests per hour, plus secondary limits of 100 concurrent requests and 900 points per minute. Spread bulk work, avoid firing parallel requests at one installation, and retry on &lt;code&gt;403&lt;/code&gt; or &lt;code&gt;429&lt;/code&gt; using the &lt;code&gt;retry-after&lt;/code&gt; header.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do you verify GitHub webhooks?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub signs each delivery with an &lt;code&gt;X-Hub-Signature-256&lt;/code&gt; header, an HMAC-SHA256 of the raw request body using your webhook secret. Verify it with a constant-time comparison before trusting the payload, and read the event type from the &lt;code&gt;X-GitHub-Event&lt;/code&gt; header.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How long does it take to build a GitHub API integration?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By hand, a production integration with auth, syncs, webhooks, and rate-limit handling takes weeks. With Nango and a coding agent like Codex, the agent writes and tests the same integration against a real connection in about an hour.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;A production-grade GitHub API integration for agents comes down to customer auth, incremental sync, writing safely, reacting in real time (signature-verified webhooks), and staying inside two rate-limit systems. Together they become the tools the AI agents in your product call to act on a customer’s GitHub.&lt;/p&gt;

&lt;p&gt;With the Nango skill, Codex writes that logic as code from a prompt and tests it against a real connection, while Nango’s runtime handles managed OAuth, durable syncs, webhook verification, retries, and observability. The same workflow covers any of Nango’s &lt;a href="https://nango.dev/api-integrations" rel="noopener noreferrer"&gt;800+ supported APIs&lt;/a&gt;, and it scales into &lt;a href="https://nango.dev/blog/just-in-time-integrations" rel="noopener noreferrer"&gt;just-in-time integrations&lt;/a&gt;: integrations built on demand by an agent instead of pre-built for every use case.&lt;/p&gt;

&lt;p&gt;Clone the &lt;a href="https://github.com/NangoHQ/github-api-integration" rel="noopener noreferrer"&gt;demo project on GitHub&lt;/a&gt; to run it end to end, or build your first integration from the &lt;a href="https://nango.dev/docs/getting-started/quickstart" rel="noopener noreferrer"&gt;quickstart&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related reading:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/github-app-vs-github-oauth" rel="noopener noreferrer"&gt;GitHub App vs. GitHub OAuth: when to use which&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/how-to-build-a-google-sheets-api-integration-with-nango-and-codex" rel="noopener noreferrer"&gt;How to build a Google Sheets API integration with Nango and Codex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/how-to-build-a-gmail-api-integration-with-nango-and-claude" rel="noopener noreferrer"&gt;How to build a Gmail API integration with Nango and Claude&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/using-ai-coding-agents-for-building-api-integrations" rel="noopener noreferrer"&gt;Using AI coding agents for building API integrations in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/nango-api-integrations-builder-skill" rel="noopener noreferrer"&gt;Introducing the Nango API integrations builder skill&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>github</category>
      <category>agents</category>
      <category>integrations</category>
    </item>
    <item>
      <title>Best open-source API integration platforms for AI agents in 2026</title>
      <dc:creator>Sapnesh Naik</dc:creator>
      <pubDate>Mon, 15 Jun 2026 19:09:15 +0000</pubDate>
      <link>https://dev.to/nangohq/best-open-source-api-integration-platforms-for-ai-agents-in-2026-2707</link>
      <guid>https://dev.to/nangohq/best-open-source-api-integration-platforms-for-ai-agents-in-2026-2707</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;“Open source” is one of the most common requirements when engineers pick an API integration platform for their AI agents and SaaS products. It promises three things: no vendor lock-in, a credential store you can inspect, and integrations you can extend rather than wait on a vendor’s catalog.&lt;/p&gt;

&lt;p&gt;Most tools publish only an open-source SDK, while the runtime that stores your customers’ credentials and runs your integrations remains closed. Nango is the exception in this comparison.&lt;/p&gt;

&lt;p&gt;This post compares four platforms by which parts of each are actually open source, from the client SDK to the runtime that stores credentials:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nango:&lt;/strong&gt; The integration platform where coding agents build API integrations and your product consumes them across 800+ APIs. The whole platform is open source under the Elastic License 2.0, and integrations are code you own in your repo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Composio:&lt;/strong&gt; A large hosted catalog of agent tools. The SDK is MIT, but the runtime that stores credentials and runs tool calls is closed source, and a &lt;a href="https://material.security/resources/the-composio-breach-one-token-10242-doors" rel="noopener noreferrer"&gt;May 2026 security incident&lt;/a&gt; forced customers to rotate keys and have their users re-authorize.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Arcade.dev:&lt;/strong&gt; An MCP runtime with per-user OAuth. The tool-building framework is MIT, but the engine that holds tokens and executes calls is a closed binary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Superglue:&lt;/strong&gt; An open-source tool that uses an LLM to generate integrations on the fly. Useful for one-off integrations, but there is no prebuilt connector catalog, no managed data syncs or webhooks, and per-customer auth sits behind a paid tier.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why open source matters for AI agent integrations
&lt;/h2&gt;

&lt;p&gt;An integration platform holds three sensitive things: the OAuth tokens and API keys for your customers’ accounts, the data those APIs return, and the code that runs against them. Open source decides how much of that you can see and control.&lt;/p&gt;

&lt;p&gt;For teams building AI agents, three properties matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You can inspect the code that holds credentials.&lt;/strong&gt; A security reviewer can read how tokens are stored, encrypted, and refreshed instead of trusting a marketing page. Where those credentials live matters too. When they sit in one closed vendor cloud, a breach of that single system exposes every customer at once.
Composio’s May 2026 security incident exposed around 10,242 customer credentials and forced every customer to rotate keys and have their users re-authorize. An open, self-hostable platform lets you keep credentials on infrastructure you control and audit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You avoid lock-in.&lt;/strong&gt; When integrations are code you own, you can move them, fork them, and keep running them. When they are entries in a vendor’s catalog, you migrate by rewriting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You can extend it.&lt;/strong&gt; A coding agent like Claude Code, Cursor, or Codex can read an open integration, change it, and ship a new one. A closed catalog only lets you consume what the vendor already built.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The problem is that “open source” has become a label applied to a client SDK. The repo with the stars is often a thin wrapper. The part that matters for an integration platform, the runtime that stores credentials and executes calls, runs on the vendor’s cloud and has no public source.&lt;/p&gt;

&lt;h2&gt;
  
  
  What counts as open source for an integration platform
&lt;/h2&gt;

&lt;p&gt;The test is whether you can read, run, and self-host the component that stores your customers’ credentials and executes your integrations. That is the runtime. An open SDK, CLI, or MCP wrapper does not make the platform open source. It is client tooling, not the core infrastructure.&lt;/p&gt;

&lt;p&gt;The word “open source” also spans a few license types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Permissive (MIT, Apache-2.0):&lt;/strong&gt; Use, modify, and redistribute with almost no restrictions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source-available (Elastic License 2.0, Functional Source License):&lt;/strong&gt; Read, self-host, modify, and embed the code in your product. These carry limits, usually that you cannot resell the software as a competing managed service, but for a team that wants to run and extend the platform they behave like open source.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proprietary:&lt;/strong&gt; No public source.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ltgjrovwo82e7lrs7sn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ltgjrovwo82e7lrs7sn.png" alt="What is actually open source: every platform ships an open SDK, but the runtime that stores credentials is open only for Nango and Superglue" width="799" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What to look for in an open-source platform for AI agents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;An open, self-hostable runtime and credential store:&lt;/strong&gt; The source for the part that stores tokens and runs integrations should be public, and you should be able to run it yourself. Check the actual repo, not the SDK.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code-first integrations you own:&lt;/strong&gt; Integrations should be code in your repo, version controlled and reviewable, so you are not locked into a catalog you cannot inspect or change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coding agents can build on it:&lt;/strong&gt; A skill or harness that lets Claude Code, Cursor, or Codex research an API, write an integration, test it against a real connection, and deploy it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More than tool calls:&lt;/strong&gt; Data syncs to keep agent context fresh for RAG, webhook processing and triggers to react to events, and per-customer configuration for tenant-specific behavior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;White-label, per-customer auth:&lt;/strong&gt; Each of your customers connects their own account under your brand, with token refresh handled for you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observability and compliance:&lt;/strong&gt; Full request and response logs that both humans and agents can read, plus the certifications that regulated buyers ask about.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The best open-source API integration platforms for AI agents
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Nango
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://nango.dev" rel="noopener noreferrer"&gt;Nango&lt;/a&gt; is the integration platform where coding agents build API integrations. Engineers or coding agents like Claude Code, Cursor, and Codex, write integrations as code in your repo using the &lt;a href="https://nango.dev/docs/getting-started/coding-agent-setup" rel="noopener noreferrer"&gt;Nango AI builder skill&lt;/a&gt;. Nango’s runtime executes them securely and at scale, covering auth, tool calls, data syncs, webhooks, and triggers across &lt;a href="https://nango.dev/api-integrations" rel="noopener noreferrer"&gt;800+ APIs&lt;/a&gt;. It is &lt;a href="https://github.com/NangoHQ/nango" rel="noopener noreferrer"&gt;open source&lt;/a&gt; under the Elastic License 2.0; you can self-host it, and hundreds of &lt;a href="https://nango.dev/customers" rel="noopener noreferrer"&gt;fast-growing AI companies&lt;/a&gt; use it as core infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxstj222ohi4oab4muqw9.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxstj222ohi4oab4muqw9.gif" alt="Nango API integrations catalog with 800+ supported providers" width="760" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is open&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The whole platform source is public under the Elastic License 2.0: the auth layer, the credential store, the proxy, and the execution runtime. You can read it, fork it, &lt;a href="https://nango.dev/docs/guides/platform/self-hosting" rel="noopener noreferrer"&gt;self-host it&lt;/a&gt;, and embed it in your product. The integrations themselves are TypeScript functions that live in your own repo, so that code is yours. Nango also publishes a library of integration templates you can clone and customize as a starting point.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbeda3pt43upjqfa7k1j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbeda3pt43upjqfa7k1j.png" alt="How Nango works: your product and coding agents connect to external APIs through Nango" width="800" height="830"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams building AI agents or SaaS products that want an integration platform they can read, extend, and self-host, where coding agents build the integrations, and the AI agents and features in their product consume them across hundreds of APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The runtime and credential store are open source:&lt;/strong&gt; You can read how tokens are stored, encrypted, and refreshed, and audit them in a security review. In self-hosted deployments, tokens live in your own database and are encrypted at rest with your own key. This is the component that the other platforms here keep closed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open code and a sandboxed runtime, so security teams can sign off:&lt;/strong&gt; Because the platform is open source, your engineers and the wider community can review how credentials are handled instead of trusting a vendor’s cloud. The execution runtime isolates each run, so one customer’s integration cannot reach another’s. See &lt;a href="https://nango.dev/blog/how-nango-runs-untrusted-customer-code-at-scale" rel="noopener noreferrer"&gt;how Nango runs untrusted customer code at scale&lt;/a&gt; for the architecture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI builder skill for 18+ coding agents:&lt;/strong&gt; One command installs the skill. It gives Claude Code, Cursor, Codex, Gemini CLI, and others the context to research an API, write the integration, and test it against a real connection. See the walkthrough of &lt;a href="https://nango.dev/blog/how-to-build-a-real-time-google-calendar-api-integration" rel="noopener noreferrer"&gt;building a real-time Google Calendar integration&lt;/a&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install the Nango builder skill for your coding agent&lt;/span&gt;
npx skills add NangoHQ/skills &lt;span class="nt"&gt;-s&lt;/span&gt; building-nango-functions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/ZG597mH9ZDg"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Test generated code against real APIs:&lt;/strong&gt; The Nango CLI ships a &lt;code&gt;nango dryrun&lt;/code&gt; command that runs generated code against a real connection and returns real responses, so the agent iterates on actual errors instead of hallucinating endpoints. The &lt;a href="https://nango.dev/docs/updates/changelog" rel="noopener noreferrer"&gt;remote function builder&lt;/a&gt; lets a coding agent compile, dry-run, and deploy an integration without a local project, straight from a prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code-first integrations you own, with no catalog lock-in:&lt;/strong&gt; Integrations are &lt;a href="https://nango.dev/docs/guides/functions/functions-guide" rel="noopener noreferrer"&gt;functions&lt;/a&gt; in your repo, deployed through CI/CD. A coding agent can fork a template, change a field, or add an API that Nango does not cover yet. You are never blocked waiting for a vendor to add a connector.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in MCP server and typed tool calls:&lt;/strong&gt; Every action is a deterministic &lt;a href="https://nango.dev/docs/guides/functions/tool-calling" rel="noopener noreferrer"&gt;tool call&lt;/a&gt; over both a REST API and a hosted MCP server, with strict input and output schemas so the model does not guess parameters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Beyond tool calls on the same platform:&lt;/strong&gt; Durable incremental &lt;a href="https://nango.dev/docs/guides/functions/syncs/sync-functions" rel="noopener noreferrer"&gt;data syncs&lt;/a&gt; keep data fresh for RAG, &lt;a href="https://nango.dev/docs/getting-started/use-cases/webhooks-from-external-apis" rel="noopener noreferrer"&gt;webhook processing&lt;/a&gt; and polling triggers react to provider events, and &lt;a href="https://nango.dev/docs/getting-started/use-cases/customer-configuration" rel="noopener noreferrer"&gt;per-customer configuration&lt;/a&gt; adapts behavior per tenant without forking code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;White-label auth across 800+ APIs:&lt;/strong&gt; A drop-in &lt;a href="https://nango.dev/docs/guides/auth/customize-connect-ui" rel="noopener noreferrer"&gt;Connect UI&lt;/a&gt; handles OAuth, API keys, JWT, basic auth, and MCP Auth, with token refresh built in. Your end users authorize under your brand, not the platform’s.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9u89rt6u2jojrtvxmdhz.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9u89rt6u2jojrtvxmdhz.gif" alt="Nango drop-in Connect UI for end-user authorization" width="720" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Observability built for agents:&lt;/strong&gt; Every operation produces &lt;a href="https://nango.dev/docs/guides/platform/observability" rel="noopener noreferrer"&gt;structured logs&lt;/a&gt; with full request and response details, exported through OpenTelemetry. A coding agent can read a failing run and ship a fix on its own.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjz3ewrpmwhbtgdg5n3w2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjz3ewrpmwhbtgdg5n3w2.png" alt="Nango observability dashboard showing detailed API integration logs" width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise compliance:&lt;/strong&gt; &lt;a href="https://trust.nango.dev" rel="noopener noreferrer"&gt;SOC 2 Type II, GDPR, and HIPAA&lt;/a&gt;, with a BAA available on request.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free self-hosting covers auth and the proxy; the full runtime is a paid tier:&lt;/strong&gt; You can self-host the auth layer and the API proxy for free. Running the complete platform yourself, with functions, data syncs, webhooks, and the MCP server, needs &lt;a href="https://nango.dev/blog/best-self-hosted-api-integration-platforms-for-ai-agents" rel="noopener noreferrer"&gt;Enterprise self-hosting&lt;/a&gt;. Most teams use Nango Cloud, which the Nango team runs for you, so you ship integrations without provisioning and operating your own servers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Composio
&lt;/h3&gt;

&lt;p&gt;Composio is a hosted tool-calling platform for AI agents. It provides agents with managed OAuth and a single MCP endpoint to access a large catalog of app toolkits.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu7y8q37y05dj8hpsf0gs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu7y8q37y05dj8hpsf0gs.png" alt="Composio platform overview" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is open&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Python and TypeScript SDKs, the CLI, and the framework adapters are MIT-licensed. The part that matters is not. The backend that stores your customers’ OAuth tokens and executes tool calls is closed source and runs on Composio’s cloud. The prebuilt tools are closed too, so you cannot read or modify them. An open SDK sits on top of a proprietary platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams that want a large hosted catalog of pre-built agent tools and are comfortable with a closed runtime where credentials live in the vendor’s cloud. A reasonable fit for internal productivity or personal automation agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Large catalog:&lt;/strong&gt; Over 1,000 app toolkits, with a Tool Router that selects relevant tools to keep the agent’s context small.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MIT-licensed SDKs with broad framework support:&lt;/strong&gt; Adapters for OpenAI, Anthropic, LangChain, CrewAI, and others.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Managed per-user auth:&lt;/strong&gt; Connected accounts are scoped to your user IDs and automatically refresh tokens. SOC 2 Type II and ISO 27001 certified.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A closed cloud that concentrates credentials, with a track record:&lt;/strong&gt; In May 2026, a breach of Composio’s systems exposed around 10,242 customer credentials, including 5,001 GitHub OAuth tokens and roughly 5,241 API keys. Composio deleted all existing API keys and required every customer to rotate keys. Because it could not revoke connected-account tokens on its own, customers had to ask their end-users to re-authorize. An &lt;a href="https://material.security/resources/the-composio-breach-one-token-10242-doors" rel="noopener noreferrer"&gt;independent analysis&lt;/a&gt; traced the scale of the exposure to credentials being aggregated in a single closed cloud. The platform is closed source, so customers could not inspect what ran or verify the fix, and no detailed root-cause postmortem was published.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The runtime and credential store are closed:&lt;/strong&gt; On every tier except enterprise, your customers’ tokens sit in Composio’s cloud, and every call routes through its backend. You cannot inspect or self-host the part that matters most.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You cannot deploy your own connector:&lt;/strong&gt; Custom tools are limited, and there is no path for a coding agent to author a new integration and ship it to Composio’s runtime. You consume the catalog, you do not extend it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool calls only:&lt;/strong&gt; There is no managed data sync layer for RAG, and there is no first-class webhook ingestion. Event-driven and scheduled work lives elsewhere.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a deeper comparison, see the &lt;a href="https://nango.dev/blog/composio-vs-nango" rel="noopener noreferrer"&gt;Composio vs Nango head-to-head&lt;/a&gt; and the &lt;a href="https://nango.dev/blog/composio-alternatives" rel="noopener noreferrer"&gt;best Composio alternatives&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Arcade.dev
&lt;/h3&gt;

&lt;p&gt;Arcade is an MCP runtime for agent tool calling, built around per-user authorization. When a tool call lacks a user grant, the Arcade Engine runs the OAuth flow, stores the tokens, and injects them at call time, so credentials never enter the model context.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2nheesdmelebv7ivtoo9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2nheesdmelebv7ivtoo9.png" alt="Arcade platform overview" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is open&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;arcade-mcp&lt;/code&gt; framework for building tools is MIT-licensed. The engine is not. The component that stores credentials and runs your tool calls ships as a closed binary with no public source. As with Composio, the open part is the client tooling, not the infrastructure that holds your customers’ tokens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams building MCP-first agents that only need tool calls to APIs, and do not need webhooks, triggers, data syncs, or a coding-agent skill for building and shipping integrations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Per-user OAuth built for agents:&lt;/strong&gt; Authorization is checked before execution and tokens never enter the model context, which is a sound security model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MIT framework for custom tools:&lt;/strong&gt; You can build and package custom MCP servers with an open framework, with skills for Claude Code and Cursor that scaffold new tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open-ecosystem signals:&lt;/strong&gt; Arcade joined the Linux Foundation’s Agentic AI Foundation as a Gold Member in December 2025.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The engine is a closed binary:&lt;/strong&gt; The exact component that stores end-customer credentials and executes calls has no public source, so you cannot audit or fork it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool calls only:&lt;/strong&gt; No data syncs to feed agent context, no webhook ingestion, no scheduled triggers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Catalog-bound, not white-label embedded:&lt;/strong&gt; It is designed for an agent to consume a shared tool catalog, not for a SaaS to offer per-customer, white-label auth to its own end customers. The first-party catalog is roughly 112 integrations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full self-hosting is enterprise-only:&lt;/strong&gt; Running the binary yourself is free, but production on-premise deployment is gated to a sales contract, and the engine stays closed wherever it runs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Superglue
&lt;/h3&gt;

&lt;p&gt;Superglue takes a different approach. Instead of a fixed catalog, you describe an integration task in natural language and its LLM pipeline generates the integration code, runs it against the target API, and self-heals when the API drifts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fis1nshqolkds9a0iqqfb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fis1nshqolkds9a0iqqfb.png" alt="Superglue dashboard" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is open&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Superglue is more open than Composio and Arcade. It publishes the runtime itself as open source, including the server, dashboard, and credential store, which you can run with &lt;code&gt;docker compose up&lt;/code&gt;. Tokens stay in your own database. Two things narrow it down for a product team. The license is the Functional Source License, which lets you self-host and modify the code but restricts its use for building a competing commercial product for two years after each release. The multi-tenant features of a customer-facing product, per-end-user credentials, role-based access, and a white-label portal are included in the paid Enterprise Edition, so the free core is effectively single-tenant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams that want an LLM to generate one-off integrations against arbitrary REST, GraphQL, or SQL sources, and do not need a prebuilt connector catalog or per-customer auth in the free version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open-source runtime you can self-host for free:&lt;/strong&gt; Credentials stay in your own database, with your encryption key. You bring your own LLM provider key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coding-agent-first by design:&lt;/strong&gt; It ships a skill for Claude Code and Cursor and an MCP server, and the integration is generated rather than picked from a catalog.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-healing integrations:&lt;/strong&gt; When an upstream response changes, the pipeline attempts to repair the integration automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The license restricts embedding it in a product:&lt;/strong&gt; The Functional Source License lets you self-host and modify the code, but you cannot use Superglue to build a competing commercial product until two years after each release. For a team embedding an integration platform in their own product, that is a real constraint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embedded multi-tenancy is paid:&lt;/strong&gt; Per-customer credentials, role-based access, and white-label auth, the core of an embedded use case, sit in the Enterprise Edition, not the free core.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLM-generated integrations need review:&lt;/strong&gt; Each integration is generated against the API you point it at, so correctness depends on the API’s docs and the self-heal loop. There is no library of tested, maintained connectors to fall back on, so you review and test the generated code before it goes to production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not a full integrations platform:&lt;/strong&gt; It generates and runs integrations, but it does not offer durable incremental data syncs at scale or first-class webhook ingestion in the free core, so it covers less ground than a platform like Nango.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Open source by component
&lt;/h2&gt;

&lt;p&gt;A GitHub repo alone does not tell you what is open. This table breaks each platform down by component: the runtime that stores credentials, the license, and the prebuilt connectors.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component or property&lt;/th&gt;
&lt;th&gt;Nango&lt;/th&gt;
&lt;th&gt;Composio&lt;/th&gt;
&lt;th&gt;Arcade.dev&lt;/th&gt;
&lt;th&gt;Superglue&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Runtime and credential store open source&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Platform license&lt;/td&gt;
&lt;td&gt;Elastic License 2.0&lt;/td&gt;
&lt;td&gt;Proprietary (MIT SDK only)&lt;/td&gt;
&lt;td&gt;Proprietary (MIT framework only)&lt;/td&gt;
&lt;td&gt;Functional Source License&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who holds credentials (self-serve)&lt;/td&gt;
&lt;td&gt;You (self-host) or your Nango account&lt;/td&gt;
&lt;td&gt;Composio cloud&lt;/td&gt;
&lt;td&gt;Arcade cloud, or your backend if you run the binary&lt;/td&gt;
&lt;td&gt;You (your database)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-host the full runtime&lt;/td&gt;
&lt;td&gt;Free + Enterprise&lt;/td&gt;
&lt;td&gt;Enterprise only (closed images)&lt;/td&gt;
&lt;td&gt;Partial (free binary, on-prem is Enterprise)&lt;/td&gt;
&lt;td&gt;Free + Enterprise&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integrations you own as code&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No (catalog)&lt;/td&gt;
&lt;td&gt;Partial (tools via SDK)&lt;/td&gt;
&lt;td&gt;Yes (generated)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coding agents build integrations&lt;/td&gt;
&lt;td&gt;Yes (18+ agents, dry-run)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Partial (author tools, closed runtime)&lt;/td&gt;
&lt;td&gt;Yes (LLM-generated)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data syncs and webhooks&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;White-label per-customer auth&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Enterprise only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prebuilt connectors&lt;/td&gt;
&lt;td&gt;800+ (open templates)&lt;/td&gt;
&lt;td&gt;1,000+ (closed)&lt;/td&gt;
&lt;td&gt;~112&lt;/td&gt;
&lt;td&gt;None (bring your own API)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Catalog counts use each vendor’s own unit (APIs, toolkits, integrations) and are not directly comparable.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You want an open, self-hostable platform where coding agents build integrations and your product consumes them across hundreds of APIs:&lt;/strong&gt; pick Nango. It is the broadest option here, with an open-source runtime, code-first integrations you own, and data syncs and webhooks alongside tool calls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want a large hosted catalog of agent tools and accept a closed runtime with credentials in the vendor cloud:&lt;/strong&gt; Composio fits, best for internal or personal automation agents. Weigh its May 2026 security incident and the closed-source risk before putting it on the path of production credentials.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want per-user OAuth for MCP tool calling and tool calls are your whole scope:&lt;/strong&gt; Arcade.dev is worth a look, if a closed engine and no syncs or webhooks are acceptable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want an LLM to generate one-off integrations against arbitrary APIs:&lt;/strong&gt; Superglue is interesting. For a product that needs a connector catalog, managed syncs and webhooks, and per-customer auth, Nango is the broader fit.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the best open-source API integration platform for AI agents?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nango is the strongest open option for AI agents in 2026. Its runtime, connectors, and templates are open source under the Elastic License 2.0, so you can inspect, fork, self-host, and embed it. Integrations are code you own in your repo, and coding agents like Claude Code, Cursor, and Codex can build new ones directly against it, with data syncs and webhooks on the same platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is Composio open source?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Composio’s Python and TypeScript SDKs are MIT-licensed, but the part that matters, the runtime that stores your customers’ credentials and executes tool calls, is closed source. The prebuilt tools cannot be inspected or modified, and a May 2026 security incident exposed credentials stored in that closed cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is Arcade.dev open source?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Arcade’s &lt;code&gt;arcade-mcp&lt;/code&gt; tool-building framework is MIT-licensed, but the Arcade Engine that stores credentials and runs tool calls is a closed binary with no public source. Full on-premise deployment is enterprise-only, and the engine stays closed wherever it runs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is Nango open source?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. Nango is open source under the Elastic License 2.0. You can read the code, self-host it, modify it, and embed it in your product. You can audit how credentials are stored, run it on your own infrastructure, and extend any integration as code in your repo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use n8n or Activepieces for customer-facing product integrations?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both are built for internal workflow automation, and their licenses reflect that. n8n’s Sustainable Use License limits use to internal business purposes, so embedding it in a customer-facing product needs a separate commercial license. Activepieces has an MIT core, but its embedding and white-label features sit in a paid enterprise edition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use these platforms with LangChain, CrewAI, or the OpenAI Agents SDK?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. All of them expose integrations through some combination of REST APIs, MCP servers, and SDKs that work with the popular agent frameworks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Most platforms in this category publish an open-source SDK while the credential store and runtime stay on the vendor’s cloud. Composio and Arcade both keep the engine that holds your customers’ tokens closed, and Composio’s May 2026 breach showed what that concentration of credentials can cost. Superglue does publish its runtime, but its license restricts embedding it in a product, and its multi-tenant features and connector coverage push a product team toward the paid tier.&lt;/p&gt;

&lt;p&gt;Nango is the broadest open option of the four. The platform is open source under the Elastic License 2.0, integrations are code you own in your repo, and you can self-host it. Coding agents build the integrations, the AI agents in your product consume them through an MCP server, tool calls, data syncs, and webhooks, and the same code runs on a tenant-isolated runtime you can read and audit.&lt;/p&gt;

&lt;p&gt;If you want to try the Nango AI builder skill with your favorite coding agent, follow the &lt;a href="https://nango.dev/docs/guides/functions/functions-guide" rel="noopener noreferrer"&gt;Nango functions guide&lt;/a&gt; to get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-self-hosted-api-integration-platforms-for-ai-agents" rel="noopener noreferrer"&gt;Best self-hosted API integration platforms for AI agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-agentic-api-integrations-platform" rel="noopener noreferrer"&gt;Best agentic API integrations platform in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-api-integration-platforms-claude-code-cursor-codex" rel="noopener noreferrer"&gt;Best API integration platforms to use with Claude Code, Cursor, and Codex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/composio-alternatives" rel="noopener noreferrer"&gt;Best Composio alternatives for AI agent integrations in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/composio-vs-nango" rel="noopener noreferrer"&gt;Composio vs Nango: a developer’s comparison for production AI agent integrations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/guide-to-secure-ai-agent-api-authentication" rel="noopener noreferrer"&gt;A guide to secure AI agent API authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/just-in-time-integrations" rel="noopener noreferrer"&gt;The emergence of just-in-time integrations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to build a Google Sheets API integration with Nango and Codex</title>
      <dc:creator>Sapnesh Naik</dc:creator>
      <pubDate>Fri, 12 Jun 2026 15:39:22 +0000</pubDate>
      <link>https://dev.to/nangohq/how-to-build-a-google-sheets-api-integration-with-nango-and-codex-449i</link>
      <guid>https://dev.to/nangohq/how-to-build-a-google-sheets-api-integration-with-nango-and-codex-449i</guid>
      <description>&lt;p&gt;This guide shows how to build a custom, customer-facing Google Sheets API integration with &lt;a href="https://nango.dev" rel="noopener noreferrer"&gt;Nango&lt;/a&gt; and an AI coding agent (Codex, Claude Code, Cursor, or any other).&lt;/p&gt;

&lt;p&gt;By the end of this guide, you will have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Google Sheets &lt;a href="https://nango.dev/docs/guides/auth/auth-guide" rel="noopener noreferrer"&gt;auth UI&lt;/a&gt; in your product (Nango Connect) so your customers can connect their own spreadsheets to your app.&lt;/li&gt;
&lt;li&gt;A durable sync that imports rows from a connected spreadsheet and keeps them up to date as the sheet changes.&lt;/li&gt;
&lt;li&gt;The ability to append rows to a customer’s spreadsheet and export reports to new spreadsheets, from your UI or from an AI agent in your product (via an MCP tool call).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmlqxx79uoxzlvoue8yd5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmlqxx79uoxzlvoue8yd5.gif" alt="The YourApp demo: an in-app AI assistant adds and updates rows in a customer's connected Google Sheet while the sync keeps the app's table current" width="600" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Get the working example:&lt;/strong&gt; the complete demo (frontend, backend, nango-integrations) is on GitHub at &lt;a href="https://github.com/NangoHQ/google-sheets-api-integration" rel="noopener noreferrer"&gt;NangoHQ/google-sheets-api-integration&lt;/a&gt;. Clone it to run the whole thing end to end, or follow the guide below and let Codex generate the same functions in your own project.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why is it hard to integrate the Google Sheets API into your app?
&lt;/h2&gt;

&lt;p&gt;A production Google Sheets API integration needs a few decisions up front:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You need an OAuth app, not an API key:&lt;/strong&gt; a Google Sheets API key only reads public spreadsheets. Accessing customer spreadsheets takes an OAuth 2.0 app with a consent screen, token refresh, and revocation handling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide on scopes early, they set your verification timeline:&lt;/strong&gt; most integrations request &lt;code&gt;https://www.googleapis.com/auth/spreadsheets&lt;/code&gt;, the standard read-write scope. Google classifies it as &lt;a href="https://developers.google.com/workspace/sheets/api/scopes" rel="noopener noreferrer"&gt;sensitive&lt;/a&gt;, so your app needs verification to go live (unverified apps cap at 100 users), and while the OAuth app’s publishing status is Testing, refresh tokens &lt;a href="https://developers.google.com/identity/protocols/oauth2#expiration" rel="noopener noreferrer"&gt;expire every 7 days&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan around the rate limits:&lt;/strong&gt; the quota is 300 read and 300 write requests per minute per project, and 60 per user. Past that, requests fail with &lt;code&gt;429: Too many requests&lt;/code&gt;, and Google’s &lt;a href="https://developers.google.com/workspace/sheets/api/limits" rel="noopener noreferrer"&gt;limits page&lt;/a&gt; says exceeding quota is planned to incur charges later in 2026.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Google Sheets webhooks:&lt;/strong&gt; the v4 API has no push notifications. Change detection means polling, or Drive API &lt;a href="https://developers.google.com/workspace/drive/api/guides/push" rel="noopener noreferrer"&gt;&lt;code&gt;files.watch&lt;/code&gt;&lt;/a&gt; channels that expire after at most one day and carry no payload.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide whether you want Google’s auto-formatting on writes:&lt;/strong&gt; &lt;a href="https://developers.google.com/workspace/sheets/api/reference/rest/v4/ValueInputOption" rel="noopener noreferrer"&gt;&lt;code&gt;valueInputOption=USER_ENTERED&lt;/code&gt;&lt;/a&gt; parses values the way the Sheets UI does (strings can become numbers and dates), while &lt;code&gt;RAW&lt;/code&gt; stores them as-is. Phone numbers and zip codes usually belong in &lt;code&gt;RAW&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep the data you write contiguous:&lt;/strong&gt; &lt;a href="https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets.values/append" rel="noopener noreferrer"&gt;&lt;code&gt;values.append&lt;/code&gt;&lt;/a&gt; looks for a “table” in the target range and writes after the last one it finds, so empty rows shift where new rows land.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid hardcoding sheet names or ranges:&lt;/strong&gt; customers rename tabs and reorder columns, which breaks A1 ranges (&lt;code&gt;Unable to parse range&lt;/code&gt;). Store the stable numeric &lt;code&gt;sheetId&lt;/code&gt;, resolve the current tab name with &lt;code&gt;spreadsheets.get&lt;/code&gt; before building ranges, and read headers instead of assuming column order.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Building all of this by hand takes weeks. With Nango and a coding agent like Codex, the same Google Sheets API integration can ship in about an hour.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use Nango for a Google Sheets API integration
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://nango.dev/" rel="noopener noreferrer"&gt;Nango&lt;/a&gt; is the integration platform where coding agents build API integrations. An agent like Codex writes the integration as code in your repo, and Nango’s runtime runs it with managed auth, retries, and observability across &lt;a href="https://nango.dev/api-integrations" rel="noopener noreferrer"&gt;800+ APIs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For a Google Sheets integration, we will use these Nango features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OAuth for Google Sheets:&lt;/strong&gt; your product gets a customizable, white-label &lt;a href="https://nango.dev/docs/guides/auth/auth-guide" rel="noopener noreferrer"&gt;auth UI&lt;/a&gt; where customers connect their &lt;a href="https://nango.dev/docs/api-integrations/google-sheet" rel="noopener noreferrer"&gt;Google Sheets&lt;/a&gt; account, while Nango handles token storage, refresh, and encryption behind it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A function builder skill for Codex:&lt;/strong&gt; to build your integration logic and flows, Codex uses the Nango &lt;a href="https://nango.dev/docs/guides/functions/functions-guide" rel="noopener noreferrer"&gt;function builder skill&lt;/a&gt;. It researches the Sheets API, writes your actions and syncs from a prompt, tests them against a real Google Sheets connection, and iterates until the integration works end to end.
Note: The Nango skill also works with other coding agents like Claude Code, Cursor, Gemini CLI, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrations infrastructure for every use case:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nango.dev/docs/guides/functions/action-functions" rel="noopener noreferrer"&gt;Actions&lt;/a&gt;: one-off operations on a customer’s sheet, like appending a row or creating a spreadsheet.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nango.dev/docs/guides/functions/syncs/sync-functions" rel="noopener noreferrer"&gt;Syncs&lt;/a&gt;: scheduled functions that keep spreadsheet rows flowing into your app.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nango.dev/docs/getting-started/use-cases/webhooks-from-external-apis" rel="noopener noreferrer"&gt;Webhooks&lt;/a&gt;: route external events, like Drive file-change notifications, to your integration.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://nango.dev/docs/guides/functions/tool-calling" rel="noopener noreferrer"&gt;MCP server&lt;/a&gt;: exposes your deployed actions as tools for the AI agents in your product.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nango also has pre-built actions and syncs for Google Sheets. They cover the common operations (a worksheet &lt;code&gt;rows&lt;/code&gt; sync, appending values, reading values, upserting rows, creating spreadsheets) and you can &lt;a href="https://nango.dev/blog/nango-clone-customize-integration-templates" rel="noopener noreferrer"&gt;enable them&lt;/a&gt; from your dashboard and use them right away, without building anything. Or have Codex clone and customize them to fit your use case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nango.dev" rel="noopener noreferrer"&gt;Sign up for Nango&lt;/a&gt; (the free tier is enough for development).&lt;/li&gt;
&lt;li&gt;Add Google Sheets as an integration on the Nango dashboard. For this tutorial, use Nango’s pre-configured developer app: activate the shared credentials on the integration page and skip the Google Cloud setup entirely. For production, register your &lt;a href="https://nango.dev/docs/api-integrations/google-sheet/how-to-register-your-own-google-sheet-api-oauth-app" rel="noopener noreferrer"&gt;own Google OAuth app&lt;/a&gt; with Nango’s callback URL &lt;code&gt;https://api.nango.dev/oauth/callback&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6hcjo3mki58s1r4jngk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6hcjo3mki58s1r4jngk.png" alt="Configuring the google-sheet integration in the Nango dashboard: Nango's developer app credentials with the spreadsheets scope" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a test connection: on the Nango dashboard, open the integration and select Connections &amp;gt; Add Test Connection, then authorize a Google account that owns a spreadsheet with a few rows of data (your own or any test account). While Codex builds your integration, it runs the generated code against this connection, so what ships has already worked against real data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjcyx20ccmz27a8n6gogl.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjcyx20ccmz27a8n6gogl.gif" alt="Adding a Google Sheets test connection in the Nango dashboard and authorizing a Google account" width="600" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give Codex a project to build in. Install the &lt;a href="https://nango.dev/docs/reference/functions/functions-cli" rel="noopener noreferrer"&gt;Nango CLI&lt;/a&gt; and run &lt;code&gt;nango init&lt;/code&gt;: it creates a &lt;code&gt;nango-integrations&lt;/code&gt; folder with the Nango framework bootstrapped, and Codex writes and deploys your syncs and actions from there. Set &lt;code&gt;NANGO_SECRET_KEY_DEV&lt;/code&gt; (your dev API key, from Environment Settings in the dashboard) in &lt;code&gt;nango-integrations/.env&lt;/code&gt; so it can test and deploy on your behalf.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8ut9rfhrptk5xlell94.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8ut9rfhrptk5xlell94.png" alt="Running nango init in the terminal to bootstrap the nango-integrations project" width="800" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install the Nango skill. Run &lt;code&gt;npx skills add NangoHQ/skills -s building-nango-functions-locally&lt;/code&gt;; the installer detects Codex and copies the skill to &lt;code&gt;.agents/skills/&lt;/code&gt;, where &lt;a href="https://developers.openai.com/codex/skills" rel="noopener noreferrer"&gt;Codex discovers it&lt;/a&gt;. The same skill works with Claude Code, Cursor, and &lt;a href="https://nango.dev/docs/getting-started/coding-agent-setup" rel="noopener noreferrer"&gt;other coding agents&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzu75mfl0segy2wbfyhbg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzu75mfl0segy2wbfyhbg.png" alt="Installing the building-nango-functions-locally skill for Codex with npx skills add" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; LLM training data on Nango is often stale. Add the Nango docs MCP server alongside the skill so Codex pulls current API references while it generates code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;codex mcp add nango-docs &lt;span class="nt"&gt;--url&lt;/span&gt; &lt;span class="s2"&gt;"https://nango.dev/docs/mcp"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Sync customer spreadsheet rows to your app
&lt;/h2&gt;

&lt;p&gt;A &lt;a href="https://nango.dev/docs/guides/functions/syncs/sync-functions" rel="noopener noreferrer"&gt;sync&lt;/a&gt; keeps a fresh copy of the customer’s sheet in your app. Here it imports every row of the spreadsheet they connect, then refreshes on a schedule so edits show up without anyone clicking refresh.&lt;/p&gt;

&lt;p&gt;You build it by prompting Codex with the Nango skill (type &lt;code&gt;$&lt;/code&gt; to mention a skill, or run &lt;code&gt;/skills&lt;/code&gt; to browse):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$building-nango-functions-locally Build a Nango sync for the google-sheet integration that imports
the rows of the spreadsheet a customer connects and keeps them up to date, refreshing every hour.
Integrate it with my frontend.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With the skill loaded, Codex:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Researches the Sheets API and the endpoints it needs.&lt;/li&gt;
&lt;li&gt;Writes the sync and a typed model for your rows.&lt;/li&gt;
&lt;li&gt;Tests it against your real connection with &lt;code&gt;nango dryrun&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Iterates on any errors until the sync works end to end.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbd7ldignrgdvvzrazf6h.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbd7ldignrgdvvzrazf6h.gif" alt="Codex building the fetch-spreadsheet-rows sync with the Nango skill and testing it against the real connection" width="560" height="484"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Codex generates this sync. You do not write it by hand.&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;createSync&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Imports rows from the connected Google Sheet and refreshes them every hour.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;frequency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;every hour&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;autoStart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// starts once your app saves the spreadsheetId metadata&lt;/span&gt;
    &lt;span class="na"&gt;models&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;SheetRow&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;spreadsheetId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;range&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getMetadata&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`/v4/spreadsheets/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;spreadsheetId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/values/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nf"&gt;encodeURIComponent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;range&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;batchSave&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;toRows&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SheetRow&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The full sync, with the row model, header mapping, and delete tracking, is in the demo repo: &lt;a href="https://github.com/NangoHQ/google-sheets-api-integration/blob/main/nango-integrations/google-sheet/syncs/fetch-spreadsheet-rows.ts" rel="noopener noreferrer"&gt;&lt;code&gt;fetch-spreadsheet-rows.ts&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When Codex finishes, it deploys the sync for you (approve the deploy when it asks):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nango deploy &lt;span class="nt"&gt;--sync&lt;/span&gt; fetch-spreadsheet-rows dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because the prompt said to integrate the frontend, Codex also wires &lt;a href="https://nango.dev/docs/guides/auth/auth-guide" rel="noopener noreferrer"&gt;Nango Connect&lt;/a&gt; into your app: customers authorize Google Sheets, paste their spreadsheet link, and the sync starts on its own.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fklr9ygk9r0qbvuqq48hf.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fklr9ygk9r0qbvuqq48hf.gif" alt="Connecting a Google account in the demo app with Nango Connect and watching the spreadsheet rows sync in" width="600" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your backend reads the synced rows from Nango’s cache and serves them to your UI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;records&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listRecords&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;providerConfigKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;google-sheet&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;connectionId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;SheetRow&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do a quick check to confirm everything works: open your app, connect a Google account, paste a spreadsheet URL, and watch the rows appear. Codex has already tested the integration with &lt;code&gt;nango dryrun&lt;/code&gt;; this is your own sanity check.&lt;/p&gt;

&lt;h3&gt;
  
  
  Letting users pick a Google Sheet
&lt;/h3&gt;

&lt;p&gt;The Sheets API has no endpoint to list a user’s spreadsheets, so the sync needs to be told which one to read. Here we handle it by asking the user for the spreadsheet URL. If you would rather let customers pick from a list of their spreadsheets than paste a link, use the Google Drive API: a Drive-scoped connection plus a file picker, which we will cover in a separate Google Drive guide.&lt;/p&gt;

&lt;h3&gt;
  
  
  Run the sync on demand
&lt;/h3&gt;

&lt;p&gt;Syncs run on a schedule (every hour in this example). When a customer wants fresh data immediately, give them a refresh button that triggers the sync on demand (behind the scenes, a &lt;code&gt;nango.triggerSync&lt;/code&gt; call) instead of waiting for the next run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$building-nango-functions-locally Add a refresh button to my app that triggers the fetch-spreadsheet-rows
sync on demand for the current user's connection.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr81196hcqdvj9eoihxk6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr81196hcqdvj9eoihxk6.jpg" alt="Flow of the Google Sheets integration: a customer authorizes via Nango Connect, the fetch-spreadsheet-rows sync polls their rows from the Sheets API into Nango's cache for your backend, and the append-row action writes rows back" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the sync deployed, a customer connects once and the rows they maintain in Sheets show up in your app and stay current: a product catalog they edit in a spreadsheet, a price list your billing features read, or the roster behind your scheduling screens.&lt;/p&gt;

&lt;h2&gt;
  
  
  Append rows to a customer’s spreadsheet from your app
&lt;/h2&gt;

&lt;p&gt;An &lt;a href="https://nango.dev/docs/guides/functions/action-functions" rel="noopener noreferrer"&gt;action&lt;/a&gt; is a one-off operation your product or an agent triggers on demand. Here it writes back: each new lead, order, or form response in your app lands as a row in the customer’s sheet. Prompt Codex to build it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$building-nango-functions-locally Add an action to the google-sheet integration that appends a row
to the customer's connected spreadsheet from typed input.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe3fvespmjd0cfkb5q0pk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe3fvespmjd0cfkb5q0pk.png" alt="Prompting Codex with the Nango skill to add the append-row action to the google-sheet integration" width="800" height="689"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Codex writes the action, tests it by appending real rows to your connected test spreadsheet, and deploys it when you approve.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Codex generates this action; approve the deploy when it asks.&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;createAction&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Append a row to the connected spreadsheet&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;retries&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// appends are not idempotent, a retry must not duplicate the row&lt;/span&gt;
    &lt;span class="na"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;nango&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`/v4/spreadsheets/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;spreadsheetId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/values/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nf"&gt;encodeURIComponent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;range&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;:append`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;valueInputOption&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;USER_ENTERED&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;insertDataOption&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;INSERT_ROWS&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;values&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;row&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;updatedRange&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;updates&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;updatedRange&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two parameters matter here: &lt;code&gt;valueInputOption=USER_ENTERED&lt;/code&gt; parses values the way the Sheets UI would (so a date string becomes a real date), and &lt;code&gt;insertDataOption=INSERT_ROWS&lt;/code&gt; inserts new rows instead of overwriting data below the table. If your customers store values that look like numbers but aren’t (phone numbers, zip codes), switch to &lt;code&gt;RAW&lt;/code&gt;. On &lt;code&gt;retries: 0&lt;/code&gt;: a rate-limited request is safe to retry because it wrote nothing, and Nango’s proxy handles that; re-running the whole action after an unknown failure could append the row twice, so the action itself does not retry.&lt;/p&gt;

&lt;p&gt;Deploy it the same way:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nango deploy &lt;span class="nt"&gt;--action&lt;/span&gt; append-row dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can test the action from your app, or run it from the Nango dashboard with the &lt;a href="https://nango.dev/docs/updates/changelog#playground" rel="noopener noreferrer"&gt;Playground&lt;/a&gt; against your connection. The demo wires one more action of the same shape for inline edits, so changing a row in the app updates the sheet:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcjhidgjc6rmwkzshvamn.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcjhidgjc6rmwkzshvamn.gif" alt="Editing a row in the demo app writes the change back to the customer's Google Sheet" width="600" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your product can now write to the spreadsheets your customers already work in. Form builders use this exact pattern to stream responses into a sheet, schedulers log bookings as they happen, and e-commerce tools export each order as it comes in, without the customer ever downloading a CSV.&lt;/p&gt;

&lt;h2&gt;
  
  
  Export app data to a new spreadsheet
&lt;/h2&gt;

&lt;p&gt;The other common write pattern is an “Export to Google Sheets” button: instead of appending to an existing sheet, your app creates a fresh spreadsheet in the customer’s account and fills it with data. The same action workflow covers it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$building-nango-functions-locally Add an action to the google-sheet integration that creates a new
spreadsheet from a title and a 2-D array of values, and returns the new spreadsheet's URL.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Codex builds this on two calls, &lt;code&gt;spreadsheets.create&lt;/code&gt; followed by a &lt;code&gt;values.batchUpdate&lt;/code&gt; write, and returns the &lt;code&gt;spreadsheetUrl&lt;/code&gt; your UI can open in a new tab. Analytics exports, scheduled report generation, and one-report-sheet-per-customer setups are all this action plus a place to trigger it from.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give AI agents in your product access to customer spreadsheets
&lt;/h2&gt;

&lt;p&gt;Once the sync and actions are deployed, the AI agents inside your product can use them. Nango exposes enabled actions as typed tool calls through a hosted &lt;a href="https://nango.dev/docs/guides/functions/tool-calling" rel="noopener noreferrer"&gt;MCP server&lt;/a&gt;, so an agent calls &lt;code&gt;append-row&lt;/code&gt; with typed inputs instead of guessing raw Sheets API parameters.&lt;/p&gt;

&lt;p&gt;Point your MCP client at Nango’s server (Streamable HTTP transport) and pass three values:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Authorization:        Bearer &amp;lt;YOUR-NANGO-SECRET-KEY&amp;gt;
provider-config-key:  google-sheet
connection-id:        &amp;lt;CONNECTION-ID&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Authorization:&lt;/strong&gt; your Nango secret key, held by your backend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;provider-config-key:&lt;/strong&gt; your Google Sheets integration ID (&lt;code&gt;google-sheet&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;connection-id:&lt;/strong&gt; the connection for the current user. Fetch it per logged-in user rather than hardcoding it, so each user’s agent acts on their own spreadsheets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Codex can wire this into your product’s agent for you:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$building-nango-functions-locally Wire my product's AI agent to Nango's MCP server for the google-sheet
integration, passing the logged-in user's connection id, so it can read and append spreadsheet rows.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmlqxx79uoxzlvoue8yd5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmlqxx79uoxzlvoue8yd5.gif" alt="The demo app's assistant updating the customer's spreadsheet through tool calls to Nango's MCP server" width="600" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you do not have an agent interface in your product yet but want to try the tools, add Nango’s MCP server to Codex itself. &lt;code&gt;codex mcp add&lt;/code&gt; does not support custom headers, so add it to &lt;code&gt;~/.codex/config.toml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[mcp_servers.nango_sheets]&lt;/span&gt;
&lt;span class="py"&gt;url&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"https://api.nango.dev/mcp"&lt;/span&gt;
&lt;span class="py"&gt;bearer_token_env_var&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"NANGO_SECRET_KEY"&lt;/span&gt;
&lt;span class="py"&gt;http_headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="py"&gt;"connection-id"&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"&amp;lt;CONNECTION-ID&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="py"&gt;"provider-config-key"&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"google-sheet"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then ask Codex: “Append a row with today’s signup count to my Metrics spreadsheet using the nango sheets MCP.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; you can view detailed action and sync logs on the Nango dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2v920gcok0yu0t8hdzc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2v920gcok0yu0t8hdzc.png" alt="Nango logs showing successful google-sheet sync and action runs" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your product’s agents can now work with customer spreadsheets through the same integration: an in-product assistant answers questions from the synced rows, a support copilot logs each resolution to the customer’s tracking sheet, all scoped to that user’s connection and logged like every other call.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common issues
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Issue&lt;/th&gt;
&lt;th&gt;Cause and fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;Unable to parse range: Sheet1!A1:D10&lt;/code&gt; (400)&lt;/td&gt;
&lt;td&gt;The tab was renamed, or the sheet name needs single quotes (&lt;code&gt;'Q2 Leads'!A1:D10&lt;/code&gt;). Store the numeric &lt;code&gt;sheetId&lt;/code&gt; and resolve the current tab name with &lt;code&gt;spreadsheets.get&lt;/code&gt; before building ranges.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;429 &lt;code&gt;Quota exceeded for quota metric 'Read requests'&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;The Sheets API allows 60 requests per minute per user. Batch with &lt;code&gt;values.batchGet&lt;/code&gt; / &lt;code&gt;values.batchUpdate&lt;/code&gt;; Nango retries with backoff for you.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;403 &lt;code&gt;The caller does not have permission&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;The connected account lost access to the spreadsheet, or was not granted access in the first place. Reconnect with the owning account or re-share the sheet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;400 &lt;code&gt;This operation is not supported for this document&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;The ID points to an Excel file stored in Drive, not a native Google Sheet. Convert it (File &amp;gt; Save as Google Sheets) and use the new ID.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Numbers or dates change when written&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;USER_ENTERED&lt;/code&gt; parses values like the Sheets UI, so "06-11" can become a date. Use &lt;code&gt;RAW&lt;/code&gt; to store values verbatim.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Appended rows land in the wrong place&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;values.append&lt;/code&gt; writes after the last "table" it finds in the range, and blank rows split tables. Keep data contiguous and check the &lt;code&gt;tableRange&lt;/code&gt; field in the response.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refresh token stops working after 7 days&lt;/td&gt;
&lt;td&gt;Your Google OAuth app is in Testing mode. Publish it to Production and complete verification; see Google OAuth invalid_grant: what it means and how to fix it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;listRecords&lt;/code&gt; is empty right after connecting&lt;/td&gt;
&lt;td&gt;The sync starts only after your app saves the &lt;code&gt;spreadsheetId&lt;/code&gt; metadata, and the first run is asynchronous. Read records once a run completes (Codex wires this into your app).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;A production-grade Google Sheets API integration comes down to customer OAuth (sensitive scopes and Google verification), reading rows durably (a polling sync, since the API has no webhooks), writing rows safely (append semantics and value parsing), and staying inside per-user quotas.&lt;/p&gt;

&lt;p&gt;With the Nango skill, Codex writes that logic as code from a prompt and tests it against a real connection, while Nango’s runtime handles managed OAuth, durable syncs, retries, and observability. The same workflow covers any of Nango’s &lt;a href="https://nango.dev/api-integrations" rel="noopener noreferrer"&gt;800+ supported APIs&lt;/a&gt;, and it scales into &lt;a href="https://nango.dev/blog/just-in-time-integrations" rel="noopener noreferrer"&gt;just-in-time integrations&lt;/a&gt;: integrations built on demand by an agent instead of pre-built for every use case.&lt;/p&gt;

&lt;p&gt;Clone the &lt;a href="https://github.com/NangoHQ/google-sheets-api-integration" rel="noopener noreferrer"&gt;demo project on GitHub&lt;/a&gt; to run it end to end, or build your first integration from the &lt;a href="https://nango.dev/docs/getting-started/quickstart" rel="noopener noreferrer"&gt;quickstart&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related reading:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/how-to-build-a-notion-api-integration-using-nango-and-claude" rel="noopener noreferrer"&gt;How to build a Notion API integration with Nango and Claude&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/how-to-build-a-gmail-api-integration-with-nango-and-claude" rel="noopener noreferrer"&gt;How to build a Gmail API integration with Nango and Claude&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/how-to-build-a-real-time-google-calendar-api-integration" rel="noopener noreferrer"&gt;How to build a real-time Google Calendar API integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/google-oauth-invalid-grant-token-has-been-expired-or-revoked" rel="noopener noreferrer"&gt;Google OAuth invalid_grant: what it means and how to fix it&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-api-integration-platforms-claude-code-cursor-codex" rel="noopener noreferrer"&gt;Best API integration platforms to use with Claude Code, Cursor, and Codex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/nango-api-integrations-builder-skill" rel="noopener noreferrer"&gt;Introducing the Nango API integrations builder skill&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/using-ai-coding-agents-for-building-api-integrations" rel="noopener noreferrer"&gt;Using AI coding agents for building API integrations in 2026&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>integrations</category>
      <category>googlesheet</category>
      <category>oauth</category>
    </item>
    <item>
      <title>Best self-hosted API integration platforms for AI agents</title>
      <dc:creator>Sapnesh Naik</dc:creator>
      <pubDate>Wed, 10 Jun 2026 19:49:50 +0000</pubDate>
      <link>https://dev.to/nangohq/best-self-hosted-api-integration-platforms-for-ai-agents-42lm</link>
      <guid>https://dev.to/nangohq/best-self-hosted-api-integration-platforms-for-ai-agents-42lm</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;AI agents and SaaS products need API integrations with their customers’ tools: read a record from the CRM, post to Slack, draft an email, update a ticket. An integration platform handles the auth, credential storage, and execution behind those calls. On a managed platform, all of that runs on the vendor’s cloud.&lt;/p&gt;

&lt;p&gt;Teams in regulated industries, or with data-residency rules or strict security reviews, need a self-hosted integration platform where credentials and execution stay on their own infrastructure.&lt;/p&gt;

&lt;p&gt;The platforms compared:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nango:&lt;/strong&gt; The integration platform where coding agents build API integrations and AI agents consume them. Open source, with a free self-hosted edition for auth and the API proxy, and Enterprise self-hosting that runs the full platform in your own cloud.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Composio:&lt;/strong&gt; A managed tool-calling platform with a large catalog. Their GitHub repo is only the SDK; the runtime that stores credentials is closed source, and self-hosting is an Enterprise-only option that goes through sales.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paragon:&lt;/strong&gt; A low-code embedded iPaaS whose full runtime can run in your own Kubernetes. Self-hosting needs a quote-based Enterprise license, and the closed-source images contact Paragon’s cloud for license checks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Arcade.dev:&lt;/strong&gt; An MCP (Model Context Protocol) runtime with per-user auth for agents. The engine is a closed-source binary and full self-hosting is enterprise-only. The documented on-prem pattern still routes through Arcade’s cloud.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why self-host an API integration platform
&lt;/h2&gt;

&lt;p&gt;An integration platform holds three sensitive things: the OAuth tokens and API keys for your customers’ accounts, the data those APIs return, and the code that runs against them. Most teams are fine letting a managed cloud hold all three. For some, that is ruled out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Regulated industries:&lt;/strong&gt; Healthcare, finance, and government workloads often cannot pass customer credentials or data through a third-party processor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data residency:&lt;/strong&gt; Some jurisdictions require data to stay in a region, or a network, that you control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security review and procurement:&lt;/strong&gt; “Where do our customers’ Salesforce tokens live?” is an easier question in a vendor review when the answer is “in our own VPC.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Air-gapped or private networks:&lt;/strong&gt; Some deployments have no route to a public SaaS API at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Open-source SDK vs self-hostable runtime
&lt;/h2&gt;

&lt;p&gt;Most platforms in this space have a public GitHub repo. In most cases, the repo contains a client SDK, a CLI, or an MCP wrapper. The backend that stores tokens, runs OAuth flows, and executes integration code is either closed source behind an enterprise license or not available at all.&lt;/p&gt;

&lt;p&gt;Self-hosting comes in three tiers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free self-hosting:&lt;/strong&gt; You deploy a working edition from public images without talking to sales.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise-licensed self-hosting:&lt;/strong&gt; The full runtime runs in your cloud, but only with a license key from the vendor’s sales team.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not self-hostable:&lt;/strong&gt; The runtime only exists as managed SaaS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;License terms matter as much as deployment. The part you run may be MIT or Apache-2.0 while the part that holds credentials is proprietary. Some licenses also prohibit embedding the tool in a commercial product.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to look for in a self-hosted integration platform for AI agents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A self-hostable runtime:&lt;/strong&gt; Auth, credential storage, and execution can run on your infrastructure. Check what unlocks it: a free edition you can deploy yourself, or an enterprise license that starts with a sales call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;White-label, per-customer auth:&lt;/strong&gt; Each of your customers connects their own account under your brand, with token refresh handled for you. Check where tokens are stored and which domain appears in the OAuth callback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP and typed tool calls:&lt;/strong&gt; Agents discover and call tools over the &lt;a href="https://modelcontextprotocol.io" rel="noopener noreferrer"&gt;Model Context Protocol&lt;/a&gt; or a REST API, with strict input and output schemas so the model does not guess parameters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A way for coding agents to build integrations:&lt;/strong&gt; A skill that lets Claude Code, Cursor, or Codex write a new integration and test it against a real connection, instead of only consuming a fixed catalog.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More than tool calls:&lt;/strong&gt; Data syncs keep agent context fresh, webhooks let agents react to events, and per-customer configuration handles tenant-specific behavior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Isolation, observability, and compliance:&lt;/strong&gt; Per-tenant isolation, full request and response logs, and the certifications (SOC 2, GDPR, HIPAA) that regulated buyers ask about.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The best self-hosted API integration platforms in 2026
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Nango
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://nango.dev" rel="noopener noreferrer"&gt;Nango&lt;/a&gt; is the integration platform where coding agents build integrations. Engineers, or coding agents like Claude Code, Cursor, and Codex, write integrations as code in your repo. Nango’s runtime executes them securely and at scale, covering auth, tool calls, data syncs, and webhooks across &lt;a href="https://nango.dev/api-integrations" rel="noopener noreferrer"&gt;800+ APIs&lt;/a&gt;. It is &lt;a href="https://github.com/NangoHQ/nango" rel="noopener noreferrer"&gt;open source&lt;/a&gt; under the Elastic License 2.0: you can self-host it and embed it in your product, but not resell Nango as a managed service. Hundreds of &lt;a href="https://nango.dev/customers" rel="noopener noreferrer"&gt;fast-growing AI companies&lt;/a&gt; use it as core infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxstj222ohi4oab4muqw9.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxstj222ohi4oab4muqw9.gif" alt="Nango API integrations catalog with 800+ supported providers" width="760" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On self-hosting:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nango offers two &lt;a href="https://nango.dev/docs/guides/platform/self-hosting" rel="noopener noreferrer"&gt;self-hosting&lt;/a&gt; paths. A free self-hosted edition deploys with docker-compose and covers managed auth and the API proxy. Enterprise self-hosting deploys the full platform with Helm charts on your own AWS, GCP, or Azure. It runs the same architecture as Nango Cloud: five Node services plus Postgres, Redis, object storage, and Elasticsearch, sized for 1M+ executions per day.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8gscghf4lgxplqorx4u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8gscghf4lgxplqorx4u.png" alt="How Nango works: your product and coding agents connect to external APIs through Nango" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams building AI agents or SaaS products that need API integrations with their customers’ tools, with credentials and execution on infrastructure they control. Coding agents build the integrations, and the agents and features in your product consume them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Credentials stay yours, encrypted with your key:&lt;/strong&gt; Self-hosted deployments require your own encryption key (the &lt;code&gt;NANGO_ENCRYPTION_KEY&lt;/code&gt; environment variable) to encrypt credentials and cached records at rest. Tokens live in your Postgres, encrypted with a key Nango never holds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI builder skill for 18+ coding agents:&lt;/strong&gt; One command installs the skill. It gives Claude Code, Cursor, Codex, Gemini CLI, and others the context to research an API, write the integration, and test it against a real connection. See the walkthrough of &lt;a href="https://nango.dev/blog/how-to-build-a-real-time-google-calendar-api-integration" rel="noopener noreferrer"&gt;building a real-time Google Calendar integration&lt;/a&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install the Nango skill for your coding agent&lt;/span&gt;
npx skills add NangoHQ/skills &lt;span class="nt"&gt;-s&lt;/span&gt; building-nango-functions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/ZG597mH9ZDg"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Built-in MCP server and typed tool calls:&lt;/strong&gt; Every action is a deterministic &lt;a href="https://nango.dev/docs/guides/functions/tool-calling" rel="noopener noreferrer"&gt;tool call&lt;/a&gt; over both a REST API and a hosted MCP server at &lt;code&gt;https://api.nango.dev/mcp&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data syncs and webhooks included:&lt;/strong&gt; Durable incremental syncs keep data fresh for RAG, webhook processing reacts to provider events in real time, and &lt;a href="https://nango.dev/docs/getting-started/use-cases/customer-configuration" rel="noopener noreferrer"&gt;per-customer configuration&lt;/a&gt; adapts behavior per tenant without forking code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;White-label auth across 800+ APIs:&lt;/strong&gt; A drop-in Connect UI handles OAuth, API keys, JWT, basic auth, and MCP Auth, with token refresh built in. Your end users authorize under your brand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observability built for agents:&lt;/strong&gt; Every operation produces &lt;a href="https://nango.dev/docs/guides/platform/observability" rel="noopener noreferrer"&gt;structured logs&lt;/a&gt; with full request and response details, exported through OpenTelemetry. A coding agent can read a failing run and ship a fix on its own.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjz3ewrpmwhbtgdg5n3w2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjz3ewrpmwhbtgdg5n3w2.png" alt="Nango observability dashboard showing detailed API integration logs" width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Just-in-time integrations:&lt;/strong&gt; Since June 2026, the remote function builder lets coding agents build and deploy actions, syncs, and webhook handlers from a single prompt, without a local project. See &lt;a href="https://nango.dev/blog/just-in-time-integrations" rel="noopener noreferrer"&gt;the emergence of just-in-time integrations&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise compliance:&lt;/strong&gt; &lt;a href="https://trust.nango.dev" rel="noopener noreferrer"&gt;SOC 2 Type II, GDPR, and HIPAA&lt;/a&gt;, with a BAA available on request.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The free self-hosted edition covers auth and the proxy only:&lt;/strong&gt; Functions, syncs, webhooks, and the MCP server require Enterprise self-hosting or Nango Cloud. Nango documents this split openly on the &lt;a href="https://nango.dev/docs/guides/platform/self-hosting#free-self-hosting" rel="noopener noreferrer"&gt;self-hosting page&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Composio
&lt;/h3&gt;

&lt;p&gt;Composio is a managed tool-calling platform for AI agents. It offers a catalog of 1,000+ apps, MIT-licensed Python and TypeScript SDKs with adapters for the popular agent frameworks, and managed per-user auth.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu7y8q37y05dj8hpsf0gs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu7y8q37y05dj8hpsf0gs.png" alt="Composio platform overview" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On self-hosting:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Composio’s main GitHub repo contains the SDKs and a CLI, not the platform. The backend that stores credentials and executes tool calls is closed source.&lt;/p&gt;

&lt;p&gt;Composio publishes official Helm charts for the platform, but the charts pull closed-source images from a registry tied to an Enterprise license.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams that want a large hosted catalog of agent tools on a managed runtime. A fit if you are prepared to sign an enterprise contract later, when credentials need to move on-prem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Large catalog:&lt;/strong&gt; 1,000+ apps, with Tool Router routing across the catalog to keep agent context small.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MIT-licensed SDKs with broad framework support:&lt;/strong&gt; OpenAI, Anthropic, LangChain, CrewAI, Vercel AI SDK, and others.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Managed per-user auth:&lt;/strong&gt; Connected accounts are scoped to your user IDs, with automatic token refresh. SOC 2 Type II and ISO 27001 certified.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Closed-source runtime:&lt;/strong&gt; The credential store and execution services have no public source. A GitHub request for self-serve self-hosting has been open since July 2024, answered only with “part of our paid offering.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Credentials always pass through Composio’s cloud on self-serve plans:&lt;/strong&gt; Even with your own OAuth app, the documented setup registers Composio’s backend callback URL with the provider. Composio’s cloud captures and stores the tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fifvy5fc3b3wyka5jdo3u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fifvy5fc3b3wyka5jdo3u.png" alt="Composio OAuth consent screen showing Composio branding" width="757" height="995"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No data syncs:&lt;/strong&gt; Triggers exist, but there is no managed sync infrastructure for keeping customer data fresh for RAG.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No path to deploy your own connectors:&lt;/strong&gt; Custom tools are marked experimental and run in-process in your own app. Coding agents can consume the catalog but not extend it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a detailed comparison, see the &lt;a href="https://nango.dev/blog/composio-vs-nango" rel="noopener noreferrer"&gt;Composio vs Nango head-to-head&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Paragon
&lt;/h3&gt;

&lt;p&gt;Paragon is an embedded integration platform for B2B SaaS. It combines a white-label Connect Portal, a visual workflow builder, and Managed Sync for data ingestion. It also exposes 1,000+ pre-built actions as tools for AI agents.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxyojvlxiryb3sq1xfvlw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxyojvlxiryb3sq1xfvlw.png" alt="Paragon visual workflow builder" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On self-hosting:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Paragon’s full runtime is self-hostable, which is rare among embedded iPaaS vendors, but it is Enterprise-only. The public installer repo deploys the platform onto Kubernetes in your AWS, GCP, or Azure account with Terraform and Helm. It requires a license key from Paragon’s sales team and a Docker account with read access to Paragon’s private image registries.&lt;/p&gt;

&lt;p&gt;Once deployed, the data plane stays local: the docs state the applications never export or sync data outside the installation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnnpx5smhtd6vj3c85hli.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnnpx5smhtd6vj3c85hli.png" alt="Paragon enterprise-installer prerequisites requiring a license key and private registry access" width="800" height="607"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enterprise B2B SaaS teams that want an embedded iPaaS with a visual builder and managed data sync, deployed in their own VPC. A fit if you have the budget and DevOps capacity for a quote-based Enterprise deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full runtime in your cloud:&lt;/strong&gt; Auth, credentials, workflows, and sync run in your cloud, with credentials stored in your own Postgres.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Managed deployment option:&lt;/strong&gt; Paragon’s team can operate the stack inside your cloud account. Most of their self-hosted customers use this option.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent tooling on top of the platform:&lt;/strong&gt; ActionKit exposes pre-built actions and triggers as LLM tools, with an official MCP server. HIPAA support for self-hosted installs was added in January 2026.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise-only and quote-based:&lt;/strong&gt; There is no free or self-serve way to run the runtime. Nothing boots without a license key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Closed source with vendor-controlled installers:&lt;/strong&gt; You deploy opaque images from private registries. The public Terraform and Helm assets carry no open-source license, and the README warns that modified charts may not be supported.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosted installs depend on Paragon’s licensing service:&lt;/strong&gt; The services contact Paragon’s cloud on bootup and on a periodic cron to verify the license.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heavy operational footprint:&lt;/strong&gt; An unmanaged install runs a Kubernetes cluster, three Postgres databases, Redis clusters, and MinIO, with your team owning monitoring and upgrades.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low-code customization only:&lt;/strong&gt; The catalog is 130+ connectors, and custom work routes through Paragon’s dashboard and low-code tooling. A coding agent cannot extend the platform.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a detailed comparison, see &lt;a href="https://nango.dev/blog/paragon-vs-nango" rel="noopener noreferrer"&gt;Paragon vs Nango&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Arcade.dev
&lt;/h3&gt;

&lt;p&gt;Arcade is an MCP runtime for agent tool calling, built around per-user auth. When a tool call lacks a user grant, the Arcade Engine intercepts it, runs the OAuth flow with the end user, and stores and refreshes the tokens. Credentials never enter the LLM context. The tool-building framework is open source under MIT.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2nheesdmelebv7ivtoo9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2nheesdmelebv7ivtoo9.png" alt="Arcade platform overview" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On self-hosting:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Arcade’s Engine, which holds tokens and routes tool calls, is a closed-source binary with no public repo. Full platform self-hosting exists only as part of the enterprise offering, and the pricing page does not mention self-hosting on any tier.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1h48x5df29lmifi7mire.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1h48x5df29lmifi7mire.png" alt="Arcade docs showing on-premise deployments are part of the enterprise offering" width="799" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Teams building MCP-first agents where per-user authorization is the priority. Best suited if tool calls are your entire scope and you do not need data syncs or webhooks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Per-user OAuth built for agents:&lt;/strong&gt; Authorization is checked before execution, the user is prompted to grant access, and tokens never enter the model context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP-native with an open-source framework:&lt;/strong&gt; Hosted MCP servers, streamable HTTP transport, and an MIT framework for building custom servers, with skills for Claude Code and Cursor that scaffold new tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Co-authored the MCP auth spec:&lt;/strong&gt; Worked with Anthropic on the MCP secure authorization capability, announced in November 2025.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Engine is closed source:&lt;/strong&gt; The exact component that stores end-customer credentials and routes authenticated tool calls has no public repository.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full self-hosting is enterprise-only:&lt;/strong&gt; The Helm-based on-prem deployment is sold as part of the enterprise offering, and self-serve install docs were removed in October 2025.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The non-enterprise “on-prem” pattern is hybrid:&lt;/strong&gt; Your MCP server must be reachable from Arcade’s cloud Engine over a public URL, and OAuth tokens stay in Arcade Cloud.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool calls only:&lt;/strong&gt; No data syncs to feed agent context, no webhook ingestion, no scheduled triggers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modest catalog:&lt;/strong&gt; The registry advertises 154 MCP servers, but only 116 are live as of June 2026, and 42 of the live ones are auto-generated.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Side-by-side comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Nango&lt;/th&gt;
&lt;th&gt;Composio&lt;/th&gt;
&lt;th&gt;Paragon&lt;/th&gt;
&lt;th&gt;Arcade.dev&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free self-hosted edition&lt;/td&gt;
&lt;td&gt;Yes (auth + proxy)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full platform on your infra&lt;/td&gt;
&lt;td&gt;Enterprise plan&lt;/td&gt;
&lt;td&gt;Enterprise plan&lt;/td&gt;
&lt;td&gt;Enterprise plan&lt;/td&gt;
&lt;td&gt;Enterprise plan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open-source runtime&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Credentials on your infra&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Enterprise only&lt;/td&gt;
&lt;td&gt;Enterprise only&lt;/td&gt;
&lt;td&gt;Enterprise only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coding agents build integrations&lt;/td&gt;
&lt;td&gt;Yes (18+ agents)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No (low-code only)&lt;/td&gt;
&lt;td&gt;Limited (scaffolding)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP tool calls&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data syncs and triggers&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Triggers only&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Catalog&lt;/td&gt;
&lt;td&gt;800+ APIs, 2000+ prebuilt actions&lt;/td&gt;
&lt;td&gt;1,000+ apps&lt;/td&gt;
&lt;td&gt;130+ connectors&lt;/td&gt;
&lt;td&gt;116 MCP servers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compliance&lt;/td&gt;
&lt;td&gt;SOC 2 Type II, GDPR, HIPAA&lt;/td&gt;
&lt;td&gt;SOC 2 Type II, ISO 27001&lt;/td&gt;
&lt;td&gt;SOC 2 Type II, GDPR, HIPAA&lt;/td&gt;
&lt;td&gt;Not publicly listed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Primary focus&lt;/td&gt;
&lt;td&gt;Build + run agentic integrations&lt;/td&gt;
&lt;td&gt;Hosted tool catalog&lt;/td&gt;
&lt;td&gt;Embedded iPaaS&lt;/td&gt;
&lt;td&gt;Tool-calling auth runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Catalog counts use each vendor’s own unit (APIs, apps, connectors, MCP servers) and are not directly comparable.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You want to try self-hosting for free before an enterprise contract:&lt;/strong&gt; Pick Nango. It is the only platform in this comparison with a free self-hosted edition.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You need credentials and execution on your own infrastructure, for an app and the AI agents inside it:&lt;/strong&gt; Pick Nango. It is the only platform here where coding agents build integrations on a runtime you can self-host, and the only one with data syncs and webhooks built in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want a visual workflow builder in your VPC and have an enterprise budget:&lt;/strong&gt; Paragon, if you accept the closed-source runtime and the license checks against Paragon’s cloud.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-user authorization for MCP tool calling is your hardest problem:&lt;/strong&gt; Arcade.dev, if tool calls are the only scope.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can you self-host Composio?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Only on the Enterprise plan. Composio publishes official Helm charts on GitHub, but the platform images are closed source and pulled from a registry tied to an enterprise license, and the docs have no self-hosting section. On self-serve plans, all credentials are stored on Composio’s cloud. See the &lt;a href="https://nango.dev/blog/composio-alternatives" rel="noopener noreferrer"&gt;Composio alternatives&lt;/a&gt; post for the wider comparison.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are Prismatic, Pipedream Connect, or Merge self-hostable?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Prismatic offers an Enterprise-plan private cloud, but Prismatic’s own team deploys and operates it in your AWS account, and its on-prem agent is a connectivity proxy, not the runtime. Pipedream (acquired by Workday in November 2025) publishes connector components on GitHub while the Connect runtime stays fully managed. Merge runs as managed cloud only.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can you use n8n or Activepieces for customer-facing product integrations?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both are built for internal workflow automation, and their licenses reflect that. n8n’s Sustainable Use License limits use to internal business purposes, so embedding it in a customer-facing product requires a separate commercial license. Activepieces has an MIT core, but embedding and white-label features sit in its paid enterprise edition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between self-hosted, open source, and on-premise?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Self-hosted means you run the software on infrastructure you control; on-premise is the stricter subset where it runs in your data center. Open source describes the license, not the deployment. A platform can be open source yet cloud-only in practice, because the published code is just an SDK. Self-hostable software can also be fully closed source, like Paragon. Always check which components the open-source license covers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the best self-hosted integration platform for AI agents?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nango is the strongest option for AI agents in 2026. It is open source, the free self-hosted edition keeps auth and credentials on your infrastructure, and Enterprise self-hosting runs the full platform (MCP server, tool calls, data syncs, webhooks) in your own cloud with your own encryption key. It is also the only platform in this comparison where coding agents build and test integrations end to end.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Self-hosting rules out most of the API integration market. Many platforms publish an open-source SDK while the credential store and runtime stay on the vendor’s cloud. The rest gate self-hosting behind an enterprise sales process: Paragon’s closed-source runtime needs a quote-based license, and Composio and Arcade.dev reserve full self-hosting for enterprise contracts.&lt;/p&gt;

&lt;p&gt;Nango is the broadest option of the four. The platform is open source, and the free self-hosted edition keeps customer credentials on your infrastructure from day one. Enterprise self-hosting runs the complete platform (auth, tool calls, syncs, webhooks, and the MCP server) in your own cloud. Coding agents build the integrations, and the AI agents in your product consume them.&lt;/p&gt;

&lt;p&gt;If you want to try the Nango AI builder skill with your favorite coding agent, follow the &lt;a href="https://nango.dev/docs/guides/functions/functions-guide" rel="noopener noreferrer"&gt;Nango functions guide&lt;/a&gt; to get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-agentic-api-integrations-platform" rel="noopener noreferrer"&gt;Best agentic API integrations platform in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-api-integration-platforms-claude-code-cursor-codex" rel="noopener noreferrer"&gt;Best API integration platforms to use with Claude Code, Cursor, and Codex&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/best-ai-agent-integration-platforms" rel="noopener noreferrer"&gt;Best AI agent integration platforms to consider in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/composio-alternatives" rel="noopener noreferrer"&gt;Best Composio alternatives for AI agent integrations in 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/just-in-time-integrations" rel="noopener noreferrer"&gt;The emergence of just-in-time integrations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/how-nango-runs-untrusted-customer-code-at-scale" rel="noopener noreferrer"&gt;How Nango runs untrusted customer code at scale&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/guide-to-secure-ai-agent-api-authentication" rel="noopener noreferrer"&gt;A guide to secure AI agent API authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nango.dev/blog/why-ai-agents-meed-an-integrations-platform" rel="noopener noreferrer"&gt;Why AI agents need an integrations platform&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>agents</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
