AI Engineer World's Fair 2026
Designing CLIs for Agents, Not Humans — Pedro Lopez, Airbyte
Slide chapters
26 slide and demo groups · Timestamps are approximate.
Read the talk
Designing CLIs for Agents, Not Humans
Pedro Lopez explains how Airbyte exposes the same data platform through MCP and a CLI—and why discovery, authentication, structured output and client limits determine which interface works for an agent.
From a talk by Pedro Lopez
At a glance
Ideas worth remembering
Keep interfaces thin over shared APIs, and use OpenAPI specifications to help them follow a frequently changing platform.
Progressive discovery keeps initial context small: MCP retrieves connector schemas on demand, while CLI skills load detailed command references when needed.
MCP authentication must fit real client UIs and long-lived session expectations; protocol features such as URL elicitation still depend on client support.
An agent-oriented CLI uses structured input and output, predictable command names, discoverable skills and noninteractive configuration.
MCP makes conversational access convenient and updates centrally; a CLI supports longer tasks and Unix output processing, while adding package-versioning and runaway-loop concerns.
One data platform, several ways to reach it
Company data lives across tools: support tickets in Zendesk, payments in Stripe, contacts elsewhere. Airbyte’s move from data movement into agent tooling builds on connecting those systems. In this talk, Pedro Lopez, a software engineer at Airbyte, introduces the Context Store: a search-optimized index between those sources and an agent, designed to let the agent retrieve and combine information across them.
An SDK serves developers building their own agents; a web UI provides direct access. MCP and the CLI bring the same platform into existing agent environments such as ChatGPT and Claude. Each interface needs to support three kinds of work:
- Manage resources. Work with organizations, workspaces and connectors.
- Connect services safely. Authenticate third-party systems without exposing their credentials to the agent.
- Ask and act. Search the Context Store, read records and write changes to connected systems.
MCP and the CLI remain thin interfaces over shared platform APIs. They accept a request, call the platform and format the result. That separation matters when the platform changes more than ten times a day: duplicating its behavior in each interface would create several implementations to keep synchronized. OpenAPI specifications supply the API source of truth, and much of the interface code builds on those specifications.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
From available connectors to five paying customers with tickets
MCP offers a convenient entry point for someone who wants company data inside a chat application. Airbyte demonstrates its ChatGPT listing, while installation outside a marketplace can use a hosted MCP URL. The user connects a service to an existing conversational interface rather than setting up a command-line workflow.
The demonstration starts with a small discovery question: which connectors are available? The response identifies four connectors in the workspace. The next request is more useful: “Show five paying customers with Zendesk support tickets.” Answering it requires information from two systems. The agent searches the Context Store, combines Zendesk support information with Stripe payment information, and returns five people with open support tickets.
The observable change is from a list of available data sources to a cross-system customer answer. Connector discovery establishes what can be queried; retrieval supplies the relevant records; cross-referencing combines the payment and support conditions. The demonstration establishes that result, but does not specify the identity-matching rule used to associate records across Zendesk and Stripe.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Describe capabilities before executing them
A connector can expose many entities and actions. Multiplying those by all available connectors could produce a large catalog of MCP tools, with a description for every operation. Airbyte instead keeps the connector execution interface to two main tools:
- Describe. Retrieve the connector schema so the agent can learn how to query it.
- Execute. Perform an operation, including reading, writing or deleting records.
The choice moves detailed knowledge into progressive discovery. The agent learns the relevant connector’s capabilities when it needs them, rather than receiving every entity and action in its initial tool context. Lopez reports that keeping descriptions narrow helped MCP performance; the talk gives a design observation rather than a quantified comparison.
Where does the operation-specific information enter the agent’s context? The diagram shows the extra discovery step between a compact tool interface and execution. The schema carries the detail that would otherwise have expanded the initial tool catalog.
Discover a connector’s schema, then execute
Read the diagram as text
- Agent. Starts with a small connector execution tool interface.
- Describe connector. Returns the schema needed to understand queries and capabilities.
- Agent with relevant schema. Loads connector-specific information through progressive discovery.
- Execute operation. Supports reading, writing and deleting records.
- Agent → Describe connector: Request connector schema.
- Describe connector → Agent with relevant schema: Return capabilities on demand.
- Agent with relevant schema → Execute operation: Use the discovered operation schema.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Authentication has two jobs—and client support decides the flow
First, the user must authenticate to Airbyte’s MCP server. In the demonstrated OAuth flow, clicking Connect opens an Airbyte sign-in, the user accepts the requested privileges, and the connected services become available. Other authentication mechanisms are technically possible, but the client’s installation UI may make them impractical. The Anthropic custom-connector registration shown in the talk provides no place to enter a bearer token, so OAuth is the usable path there.
Session duration is part of that experience. Users expect MCP access to behave like a mobile app: available when needed, without repeated sign-ins. Airbyte therefore keeps long-lived offline sessions separately from web-app sessions, with their own lifecycles. Reusing a web login’s lifecycle would miss the expectation that the agent connection stays available independently.
Second, the user must authorize the third-party service itself. For a request to connect HubSpot, Airbyte generates a link. Opening it displays a widget where the user selects entities to connect, then redirects to HubSpot’s OAuth flow. This gives the user a place to complete sensitive authorization outside the agent’s conversation.
MCP elicitation offers a protocol mechanism for requesting information from the user. Form-mode elicitation is unsuitable for sensitive credentials; URL-mode elicitation is closer to Airbyte’s link-based flow. Yet specification support does not guarantee client support. In the recorded Claude Desktop example, URL-mode elicitation is unsupported, so Airbyte uses its own link flow. That limitation applies to the demonstrated client behavior, rather than establishing that URL elicitation cannot work in other clients or later releases.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
The same customer question, through JSON and predictable commands
The CLI demonstration repeats the customer question. This time, the agent loads a skill describing the CLI, uses commands to discover the available connectors, queries the Context Store and aggregates the data. It returns the same five users. The data platform and task remain the same; the route into the platform changes.
Designing that route for an agent changes what counts as convenient. Airbyte accepts JSON input and returns JSON output. For complicated query inputs, a structured object lets the agent express the request directly instead of guessing how to distribute it across many flags. On the output side, JSON preserves structure that another program can select and transform.
That output format makes Unix composition useful. A response can flow through a pipe into jq, which selects fields or trims the result. A long response therefore does not have to enter the agent’s context in full: another program can reduce it first. This is a practical advantage of the CLI environment, where the agent can work with both the data interface and the surrounding operating-system tools.
Command consistency reduces another kind of guesswork. Airbyte uses a noun followed by a verb: connectors list, connectors create, and workspace list. Once the agent learns the pattern for one resource, it has a useful expectation for another. The goal is to make the right command “dead obvious” without requiring repeated documentation searches.
Repeated agent mistakes are also design feedback. If agents keep calling the same nonexistent command, consider making that command the supported interface. A recurring error may reveal that the naming scheme is less obvious than its designer thought. The proposed response is to improve the command vocabulary so agents can more easily find the intended operation.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Ship discovery instructions, and never wait for a prompt
Installing a CLI does not, by itself, tell an agent that the tool exists or when to use it. Airbyte ships a skill with the CLI to supply that missing discovery layer. Its description makes connector-related requests a reason to load the skill and invoke the tool; its instructions help the agent use the CLI effectively.
The skill needs the same restraint as the MCP tool catalog. A large main skill would consume context before the agent knows which details matter. Airbyte separates detailed command information into reference files and lets the main skill point to them. Both interfaces therefore use progressive discovery: expose enough to find the capability, then load the detail needed to use it.
Interactive prompts introduce a different failure mode. A human-oriented CLI may stop to ask for an answer, but an agent invocation cannot assume a person is present to type one. The process can simply get stuck. Inputs must be supplied through flags or other noninteractive configuration; credentials can be prepared in environment variables or configuration files before invocation. JSON handles complex query data, while these mechanisms handle setup that should not interrupt execution.
This requirement extends beyond authentication. Any command that pauses to ask a human a question can block the agent’s work. Preparing configuration out of band lets the command run with the information it needs already available.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Choose the execution environment as well as the interface
The closing comparison adds operational constraints to the design choices. MCP features vary across clients, and providers impose limits beyond the protocol itself. Lopez cites a two-kilobyte limit on server and tool-call descriptions in Claude, along with limits on tool execution duration. These are reported constraints from the environment discussed in the recording, not universal MCP limits. Execution deadlines make long-running processes harder to fit into that interface.
A hosted MCP server has an update advantage: the provider can update the server centrally. A CLI package installed elsewhere needs versioning and distribution, and keeping those installations current takes work. The CLI’s freedom from the same client-imposed limits also has a cost. Repeated calls can go wrong and leave the agent spinning in a loop; fewer external restrictions do not automatically produce better execution.
The useful division follows the task and user:
- MCP for convenient conversational access. Nontechnical users can connect data, prototype quickly, build one-off reports and work within the MCP ecosystem.
- CLI for longer work and large outputs. Technical users can run longer tasks and use Unix tools to redirect results to files, inspect the beginning with
head, inspect the end withtail, or transform structured output through pipes.
The customer example shows why both can belong in one product: each reaches the same Context Store and returns the same five customers. The decision turns on how the agent discovers capabilities, how the user authenticates, where execution happens, and what must happen to the output afterward.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Read the complete timestamped transcript
23 slide groups · 3 demo milestones. Extracted from the recording; expand builds to follow changes. Timestamps are approximate.
- 0:12
Hello, everybody. Uh, my name is Pedro. I am a software engineer at Airbyte, and today we're gonna be talking about how we built our Agent MCP and our CLI. Um, and before we go into the nitty-gritty of all of that, um, I wanted to give a bit of context on what we do at Airbyte and how all of this kinda fits into, uh, our product. So Airbyte's been around for a while. Um, we started as the open source, uh, standard for data movement,
How We Built the Airbyte Agent MCP Server and CLI
Pedro Lopez introduces how Airbyte built its Agent MCP server and CLI.
Text in image
How We Built the Airbyte Agent MCP Server and CLI AI Engineer World’s Fair 2026 - Pedro Lopez / Airbyte
Airbyte’s Data Infrastructure
Airbyte connects SaaS tools to analytics pipelines and is extending its data infrastructure to AI agents. The slide reports that 18% of the F500 uses Airbyte and cites 7,000+ daily active companies.
Text in image
Airbyte is the open-source data infrastructure layer for analytics and agents. We provide data teams and AI agents with a unified layer to seamlessly access, search, and take action on data across any system at scale. 18% of F500 uses Airbyte 7,000+ Daily Active Companies salesforce files
- 0:42
um, connecting all of your SaaS tools that you might be using, like Zendesk, Stripe, uh, GitHub, et cetera, to, um, your data analytics pipelines. And now we're using that same expertise and have evolved to being the data and action layer for your AI agents. Um, and we do that by offering a, our Airbyte Agents product, um, that has what we call the context store, which connects to all of those tools that, that I mentioned before and sits in
Agents, Context Store, and SaaS Tools
Airbyte’s context store sits between AI agents and SaaS tools, providing a search-optimized index that agents can query to gather and join records across tools.
Text in image
AI AGENTS Claude ChatGPT FRAMEWORKS LangChain OpenAI SDK CONTEXT STORE SAAS TOOLS salesforce stripe
- 1:12
between your agents, um, to provide a search optimized index of all of your data, um, that is able to be more efficiently queried by your agents. So you're able to gather information about all of these, um, records and, and, and contacts and stuff that you might have in these all, all these tools and join them together in an easy way, uh, through our context store. And so our goal is that we wanna make data available and actionable
Making Data Available and Actionable
Airbyte’s context store has four interfaces: a Python SDK, MCP, a CLI, and a UI. The talk focuses on MCP and the CLI for access through existing agents such as Claude and ChatGPT.
Text in image
Making data available and actionable, everywhere SDK PYTHON MCP CLAUDE / CHATGPT CONTEXT STORE CLI TERMINAL UI AIRBYTE
- 1:41
everywhere. And so we have a couple different interfaces by which you can access this context store. Um, one is our SDK, which is more usable if you are, uh, building your own agents and your tools. Um, our UI, which is, um, just a, a quick way that you can use it through our web app. Uh, and then what we're gonna be focusing on in this talk, which is our MCP and our CLI, which is, um, a way to easily make that, um, available within existing, uh, agents like ChatGPT,
- 2:12
um, and, and Claude. So what exactly are we exposing through these interfaces? Um, three main things. One is the ability to manage all of the, the core resources of our product to our organizations, workspaces, and connectors. Um, and so all these interfaces should let you, uh, interact with that. Second, um, super important is be able to authenticate those third-party services that I mentioned about earlier, um, and do so in a way that's secure and doesn't expose your
MCP and CLI Capabilities
The interfaces should manage resources and active workspaces, authenticate connectors without exposing credentials to agents, and search the Context Store or read and write connected systems.
Text in image
What should our agent interfaces be able to do? MCP and CLI capabilities Manage Configure your organizations, workspaces, and connectors. Easily switch or set your active workspace environment. Connect Safely authenticate connectors to third-party services securely. Ensure zero credential exposure directly to agents. Ask & Act Search across connected systems via the Context Store. Read and write directly to live systems with ease.
- 2:42
credentials, uh, to, to the AI agents. And third, um, ask and act. So we wanna expose the ability to search across the context store, uh, be able to read and write, uh, take action on all those systems. Um, and so we want all of our interfaces to be able to span across these, uh, three capabilities. Um, so the MCP and the CLI, the way to-- The way that we've structured things is that they are s- thin unified interfaces into our
MCP and CLI as Platform Interfaces
MCP and CLI pass commands through a shared API, keeping business logic in the platform. OpenAPI specs help keep the interfaces current as the platform changes more than ten times a day.
Text in image
The MCP and CLI are interfaces to the platform Most of the surface is presentational: take command, call the API, return the result MCP | CLI API Platform Each interface has special requirements, but all the core business logic remains in the platform. Platform has frequent deployments and interfaces must stay up-to-date. OpenAPI-based generation enables those quick updates.
- 3:12
platform, not re-implementations of the platform. So most of the surface layer of these, uh, interfaces are presentational, where you take a command, uh, and you call the platform and format the results in some way. Uh, and everything kinda sits on top of our shared platform and APIs. Um, and because we wanna-- We deploy a lot, you know, our, our platform changes like over ten times a, a day, we wanna keep these things up to date as we go. And so a big part of this as
- 3:41
well is OpenAPI, OpenAPI, uh, specs as a source of truth for how to connect to, to our APIs, and a lot of those interfaces, um, are built on top of, uh, those specs.
The MCP
Airbyte Agent MCP connects assistants such as ChatGPT and Claude to business applications. Lopez presents it as an easy way for less technical users to plug their data into an assistant.
Text in image
The MCP Airbyte Agent MCP Claude Perplexity ChatGPT Cursor stripe
- 3:56
Okay, so let's go into these interfaces. Let's starts with-- Let's start with the, the MCP. And so MCPs are really great for users that might not be technical. Um, and in our case, it's great for those users that just want to plug their data straight into ChatGPT or Claude in an easy way. Um, and the cool thing is they're, they're very nicely packaged. They're very, uh, easy to install. For example, here's our, um, listing on the ChatGPT app, uh, listing, the official, uh,
ChatGPT Apps
Airbyte’s ChatGPT app listing offers sign-in to connect business apps. The dialog also explains what data the app can access and flags elevated risk.
Text in image
ChatGPT Apps Add Airbyte Agent Engine to ChatGPT Connect ChatGPT to all your business apps through Airbyte Agent Engine, the data layer for AI agents. Query live data from CRMs, support platforms, payment systems, code repositories, and more. Airbyte's type-safe connectors let ChatGPT retrieve information, interact with external systems, and trigger actions across different systems. The built-in Context Store indexes your data for fast search... Sign in with Airbyte Agent Engine ↗ You're in control. ChatGPT always respects your training data preferences, and is limited to permissions you've explicitly set. Apps may introduce elevated risk. ChatGPT is built to protect your data, but attackers may attempt to use ChatGPT to access your data in the app, or use the app to attempt to access your data in ChatGPT. Data shared with this app. By adding this app, you allow it to access: (1) basic information typically shared when you visit a website, such as your IP address and approximate location (learn more), and (2) a summary of your recent context and intent within ChatGPT. Our policies require that apps only access relevant content to respond to your requests. This data will be used as described in the app Terms of Use and Privacy Notice. Interface text: Loading Information Category Capabilities Developer Website Version 1.0.0
- 4:26
store that they have. Um, and we also have a application for the, the Anthropic one, uh, which we're, we're still pending on, if there's anybody from Anthropic out there that wants to approve us. Um, but even if you're not on these marketplaces, um, they are pretty trivial to install, uh, for a, an end user. You just give it the hosted MCP URL, and you're able to, um, connect pretty quickly. Okay, so let's look at, uh, an example.
Custom MCP Setup
Claude Desktop and ChatGPT can connect to Airbyte by entering the hosted MCP URL in their custom setup forms. The ChatGPT example selects OAuth.
Text in image
Claude Desktop Custom Connector ChatGPT Custom App Interface text: Add custom connector BETA Connect Claude to your data and tools. Learn more about connectors or get started with pre-built ones. Airbyte Agent MCP https://mcp.airbyte.ai/mcp Advanced settings Only use connectors from developers you trust. Anthropic does not control which tools developers make available and cannot verify that they will work as intended or that they won't change. Building an MCP server? Report issues and subscribe to updates here Cancel Add New App Icon (optional) PNG only. Best results at 256 x 256 px or larger. Max file size: 10 KB Name Airbyte Agent MCP Description (optional) Explain what it does in a few words Connection Server URL Tunnel https://mcp.airbyte.ai/mcp Authentication OAuth Advanced OAuth settings Review discovered OAuth settings, or enter them manually, then choose a client setup method and configure default scopes Custom MCP servers introduce risk. Learn more I understand and want to continue OpenAI hasn't reviewed this MCP server. Attackers may attempt to steal your data or trick the model into taking unintended actions, including destroying data. Read the guide Create
Listing Available Connectors
In the demo, Claude uses the Airbyte Agent MCP integration to check available connectors and begins reporting four set up in the workspace.
Text in image
Which Airbyte connectors do I have available? Loaded tools, used Airbyte Agent MCP Integration You have four connectors set up Interface text: Write a message... Sonnet 4.6 Low
4:54Demo milestone
- 4:56
This is our MCP in action. Here I'm asking, you know, which connectors do I have available, um, and it goes through, "Hey, I have four connectors set up in this workspace." And then I can ask it some questions about my data, like, "Show five paying customers with Zendesk support tickets." Um, and so this right now is looking through all the connectors that we have, searching the context store for that information that I, that I asked it about, um, and then combining that information across Zendesk and
Querying Customers and Support Tickets
The demo searches the context store and combines Zendesk and Stripe data to find paying customers with support tickets.
Text in image
Want me to query any of them, or look up what additional connector types are available to add? Show me five paying customers with Zendesk support tickets. Cross-referencing Zendesk ticket requesters [illegible] Interface text: Write a message... + Sonnet 4.6 Low
5:02Demo milestone
- 5:26
Stripe, um, so that it can come up with an answer for me. Okay, and there we go. So it cross-referenced Zendesk and Stripe and then came back with, you know, five of those people that, um, have open support tickets. Cool. So let's go into kinda some lessons learned while building this, uh, MCP and things that you might wanna keep in mind if you're doing, uh, something similar. So one thing that we decided to do, um, after trial and error is to keep the tool count small. So,
Keep tool counts small
After trial and error, Airbyte chose to keep its MCP tool count small.
Text in image
1. Keep tool counts small
Keep tool counts small
Airbyte uses describe_connector to reveal a connector’s query schema and execute for operations. Progressive discovery lets agents learn connector capabilities without loading them all into context upfront.
Text in image
1– Keep tool counts small Airbyte Agent MCP Design Our approach to MCP tools Keep the tool count small. Easier for an agent to know what to call with minimal guidance. One execute tool handles get / create / update. Progressive discovery allows the agent to know how to query different connectors without overloading the context up front. describe_connector execute
- 5:56
um, we-- For the execution part of the connector where you're pulling that data, we only expose a really- Deal with two main tools. One is to describe the connector to get the schema of how do you query that information, and two is execute, that's able to read, write, and delete records. Um, the opposite end of the spectrum here would be since we connect to so many different, um, connectors and each of these has different entities, different actions you can take, we
- 6:26
could have exposed, you know, an MCP tool for each one of these. Um, but instead what we found is really keeping it narrow, using progressive discovery of all of the capabilities, um, that the connector has available, um, and really limiting the amount of context that you shove into the, those tool descriptions, um, really helps with the, the performance of the, of the, the MCP server. Two, OAuth is the way. So this, this refers to
OAuth is the way
Airbyte uses OAuth to authenticate its MCP server. Connecting through Claude starts a sign-in and permission flow; offline OAuth sessions are stored separately from the Airbyte web app.
Text in image
2 - OAuth is the way Airbyte Agent MCP Design The spec and clients only really support OAuth. Users expect long-lived sessions, akin to a mobile app. We use offline OAuth sessions that are stored separately from the Airbyte web app. Interface text: Add custom connector BETA Connect Claude to your data and tools. Learn more about connectors or get started with pre-built ones. Airbyte Agent MCP https://mcp.airbyte.ai/mcp Advanced settings Only use connectors from developers you trust. Anthropic does not control which tools developers make available and cannot verify that they will work as intended or that they won't change. Building an MCP server? Report issues and subscribe to updates here Cancel Add
- 6:56
how you authenticate the MCP server itself. Um, so this is, uh, an example for, like, Anthropic. You click a button, uh, to connect, and that spins up our OAuth flow so you can sign into Airbyte, um, accept the, the privileges, and then you're all set up with all the connectors that you've, uh, linked up. Um, and technically you can use other authentication mechanisms through MCP, but you're really gonna have a hard time, um, if you do, like, Bearer Auth or, or anything like that 'cause the
- 7:26
spec is really heavy on OAuth and all of the clients, the, the main ones at least, um, are really leaning towards the, the OAuth as a, a better UX for, uh, installing that connector. So that's an example for, uh, the, the Anthropic, um, custom connector, um, registration where they have no, no way of you to put, like, a, a Bearer token or anything. It's just all defaulting to, to OAuth. So that's is, is very important. And two,
- 7:56
users actually expect, um, to have long-lived sessions, uh, through these MCP servers. Um, unlike a web app where you might be okay with having to sign in again, um, a couple times, uh, users expect to use MCPs more like a mobile app where they don't really have to think about authenticating. It's just available, uh, whenever they wanna use it. And so that has its own little, um, you know, uh, things to keep in mind as you're implementing OAuth is keeping offline long
- 8:26
sessions, um, that are stored separately from the web app and have its own set of, uh, of life cycles. Cool. Elicitation, though, is not the way. So I'll get into what an elicitation is, but a big part of, um, the MCP server that I mentioned is you need to be able to connect your tools. You need to be able to give credentials in a way that's safe. Um, and to do that, uh, basically when you ask, you know, "How do I connect to, to HubSpot?" um, we generate a
Keep tool counts small
After trial and error, Airbyte chose to keep its MCP tool count small.
Text in image
1. Keep tool counts small
- 8:56
link that you go to which you can... pops up this widget, and you're able to select, you know, which, uh, entities you wanna connect and redirect to, to HubSpot to go through the, that OAuth flow. Um, now technically, MCP has something in the spec that allows you to surface those kinds of URLs, um, and, and it process those inputs, um, called elicitation. It's a way that you can request information from the user. For the
Connecting HubSpot to Airbyte
Airbyte generates a link to a widget where users select HubSpot entities, then redirects them to HubSpot’s OAuth flow to authorize access.
Text in image
3 - Elicitation is not the way (for now) Airbyte Agent MCP Design HubSpot Entities: None, Suggested, All 4/6 Read / Write Companies: Read ✓, Write ✓ Contacts: Read ✓, Write ✓ Deals: Read ✓, Write ✓ Objects: Read ○, Write — Schemas: Read ○, Write — Tickets: Read ✓, Write ✓ Authentication: OAuth Authenticate your HubSpot account Connecting Airbyte to HubSpot Airbyte This app is requesting access to your HubSpot account. Continue connecting if you agree. You are agreeing to use a third party application by installing this integration. Please confirm you understand that the app’s own terms and privacy policy apply to its use and that you’ve reviewed and agree to those terms and privacy policy. Connect app Cancel This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
MCP elicitation modes
MCP elicitation requests information through a client: form mode gathers structured data, while URL mode directs sensitive interactions to external URLs. Lopez says uneven client support limits URL mode for now.
Text in image
3 – Elicitation is not the way (for now) Airbyte Agent MCP Design Client Features Elicitation The Model Context Protocol (MCP) provides a standardized way for servers to request additional information from users through the client during interactions. This flow allows clients to maintain control over user interactions and data sharing while enabling servers to gather necessary information dynamically. Elicitation supports two modes: • Form mode: Servers can request structured data from users with optional JSON schemas to validate responses • URL mode: Servers can direct users to external URLs for sensitive interactions that must not pass through the MCP client Interface text: Copy page
- 9:25
longest time, um, it was only form mode elicitation, which is not, um, applicable for sensitive, um, sensitive, uh, data like credentials for an API. But more recently, um, this URL mode elicitation became a thing, um, that's very similar to what we're doing. But the problem is, uh, support across the MCP clients. So that's a big theme, uh, when working with MCP, is that even though there is a spec, the features that is, are
URL-mode elicitation client support
Claude Desktop cannot complete the Acme connection because it does not support URL-mode elicitation. Client support varies, so Airbyte uses its own approach for this flow.
Text in image
3 – Elicitation is not the way (for now) Airbyte Agent MCP Design It looks like connecting the Acme service requires a feature (URL-mode elicitation) that this client doesn't support yet, so I'm not able to complete that connection here. You may need to try this from a client that supports it, or let me know if there's something else I can help with. Interface text: Loaded tools, used url-elicitation-sample integration
- 9:55
supported across the clients kind of vary quite a bit. Um, so this is an example from Claude Desktop where, you know, it just is telling me, "Hey, I don't support URL mode elicitation. I can't do that." And so we have to go back to doing our own thing, um, and not using the spec for that, for that kind of thing. Okay. Let's talk about the CLI a bit. So if MCPs are easy for these non-technical users, um, CLIs are kind of the more technical counterpart, might call it the kind of more powerful
The CLI
The CLI example searches HubSpot deals, selects IDs, deal names and amounts, and returns 20 records in 142ms.
Text in image
The CLI $ airbyte-agent connectors execute --json '{ "name": "hubspot", "entity": "deals", "action": "context_store_search", "select_fields": ["id", "properties.dealname", "properties.amount"], "params": { "limit": 20, "query": { "filter": { "eq": {…} } } } }' ✓ 20 records · context_store_search · 142ms Interface text: airbyte-agent — execute- 10:25
i-in some ways that we'll get into. And this is the, the same example we saw earlier but this time with the, the MCP... or, or sorry, with the CLI, where we're asking, you know, which connectors do I have available. It's this time loading a skill that tells it about the CLI, um, and then, you know, using the CLI itself to query things. We got back the connectors, then we asked, you know, "Show five paying customers that have Zendesk support tickets," same as last time. Um, it's able to this time use the CLI to query that,
Cross-referencing customers and support tickets
The agent inspects the Stripe and Zendesk connectors, then fetches active subscriptions and customers while reading the Zendesk docs to find five paying customers with support tickets.
Text in image
All four support context store and run in direct_and_context_store mode, so they're ready to query. Let me know if you'd like to pull data from any of them. Show me five paying customers that have Zendesk support tickets. • This requires cross-referencing Stripe (paying customers) and Zendesk (support tickets). Let me inspect both connectors and read their docs first. Read 3 files • Now let me inspect both the Stripe and Zendesk connectors to understand their entities. Ran 2 shell commands • Let me see the full inspect output to find the correct field names. Ran 3 shell commands • Now let me read the Zendesk docs and pull Stripe paying-customer data. I'll fetch Stripe active subscriptions and customers in parallel with the Zendesk docs. Running 2 shell commands... $ airbyte-agent connectors execute --json '{"name":"stripe","entity":"subscriptions","action":"context_store_search","select_fields":["id","status","customer"],"params":{"limit":30,"query":{"filter":{"eq":{"status":"active"}}}}}' Interface text: Brewed for 18s Symbioting… (1m 13s · ↓ 2.6k tokens) Tip: Use /btw to ask a quick side question without interrupting Claude's current work >> auto mode on (shift+tab to cycle) · esc to interrupt · ← for agents10:52Demo milestone
- 10:55
query the context store, aggregate that data, and then eventually it should come back with a result now. Okay. Um, so there's those same five, um, five users. So, um, on the design side for CLIs, I think one important thing to keep in mind is to design those CLIs with agents in mind. Um, some of the things that might be helpful for users when you're making a CLI are gonna be, like, blockers for
Keep tool counts small
After trial and error, Airbyte chose to keep its MCP tool count small.
Text in image
1. Keep tool counts small
- 11:25
agents, um, and we'll get into that a little bit more. Um, the first design decision here that we made was take JSON in and return JSON out. So, uh, for humans it's very nice to specify, um, a bunch of flags, uh, to work with CLIs. But when it comes to these more complicated, um, inputs that, uh, you have to build to, to make these queries, and agents are
JSON in, JSON out
Airbyte makes JSON the primary CLI interface: agents can construct complex query payloads and pipe longer responses to jq for filtering.
Text in image
1 – JSON in, JSON out Airbyte Agent CLI Design In addition to flags, all our commands support JSON as payload and output format. This is considered the primary interface. JSON is easier to work with for complex schemas, and allows for pipes to jq for working with larger responses. exe airbyte-agent connectors execute --json '{ "name": "hubspot", "entity": "deals", "action": "context_store_search", "select_fields": ["id", "properties.dealname", "properties.amount", "properties.closedate", "properties.dealstage", "properties.hubspot_owner_id", "properties.hs_is_closed_won"], "params": { "limit": 20, "query": { "filter": {"eq": {"properties.hs_is_closed_won": true}}, "sort": [{"properties_closedate": "desc"}] } } }'- 11:55
really good at working with JSON. Um, they're able to construct this, uh, in a much more, um, direct and, and less of a guessy way, um, than using those flags. And so on the output- JSON also makes it easy to deal with longer responses. Um, be able to leverage one of the key capabilities of CLIs, which is, hey, you have these, this Unix system with pipes that you can redirect the output to
- 12:25
different, um, programs. So you can use jq, for example, to select certain, certain things from the output and trim that. And so JSON really unlocks a lot of that, um, capability. Two, consistency is very much key here. So it should be dead obvious for agents to know how to do something across all of the resources that you're exposing. If you have structured your CLI in a way that it's, it's structured where there's a
Keep tool counts small
After trial and error, Airbyte chose to keep its MCP tool count small.
Text in image
1. Keep tool counts small
Consistency is key
Use the same noun–verb pattern across CLI resources so agents can predict commands. If agents repeatedly choose the wrong command, consider making that behavior the contract.
Text in image
2 – Consistency is key Airbyte Agent CLI Design It should be obvious for agents to know how to do something, across resources exposed. If agents keep making the same mistake, consider making it the contract. airbyte-agent connectors list airbyte-agent connectors create airbyte-agent connectors execute --name salesforce --action context_store_search --entity accounts Interface text: cli_cmds
- 12:55
noun and then a verb, phrase, this example, you know, connectors list, connectors create. Make sure that when you're implementing a workspace, um, CLI, uh, commands, they also follow that same format. So workspace list is another one that, that we have. And so it's very, um, critical that agents know the right way to do things, and it's easy for them to know the right way to do things without having to read a bunch of documentation. And another interesting fact here is,
- 13:25
you know, if, if you see agents making the same mistake over and over, um, calling the wrong command a bunch of times, consider making that your contract. Make it dead simple for agents to stumble across the, the right way to, to use things. Um, 'cause that usually means that something is not quite as obvious as it should be in your AP- in your CLI contract if agents keep making the same kind of mistakes. Three, skills are-- skills ship with, uh, the CLI tool. So skills
Keep tool counts small
After trial and error, Airbyte chose to keep its MCP tool count small.
Text in image
1. Keep tool counts small
Skills ship with the tool
A skill helps agents discover the Airbyte CLI and use it effectively. Its main file points to command-specific references, loading detailed guidance when needed instead of putting everything in the initial context.
Text in image
3 – Skills ship with the tool Airbyte Agent CLI Design Skills are a must They allow the agent to discover the CLI, and know how to use it effectively. Use references on a single skill rather than frontloading the main skill.md. Embedded skill screen: description Drive the `airbyte-agent` CLI to manage Airbyte connectors, workspaces, and organizations. Run list/get/search/create/update actions against connector data (HubSpot, Salesforce, Slack, GitHub, etc.), install new connectors via the browser credential flow, list and switch workspaces, list organizations, inspect connector metadata, read skill docs, or print the merged CLI + OpenAPI schema for any operation. Use when the user mentions Airbyte, the `airbyte-agent` CLI, connectors, syncs, workspaces, organizations, or asks to read/write data from a connected SaaS product. metadata version v0.1.2 airbyte-agent Note Requires the airbyte-agent CLI on PATH. Install via brew install airbytehq/tap/airbyte-agent-cli or curl -fsSL https://airbyte.ai/install.sh | bash. See the project README for other options. The CLI is invoked as airbyte-agent <resource> <operation>. It exposes Airbyte’s data plane through a uniform interface — every command takes a JSON payload and returns JSON. Important Before running any airbyte-agent command, open the matching reference under references/ and read it first. This top-level file only carries cross-command rules; the per-command syntax, required parameters, response shape, error recovery, and "do NOT" guidance live in each references/<command>.md. Skipping the reference leads to guessed parameter names, missing required fields, and avoidable round-trips — read it even for commands you think you know. Universal rules (apply to every command) Interface text: main airbyte-agent-cli / skills / airbyte-agent / SKILL.md Preview Code Blame Raw Top
- 13:55
are a must, uh, when you're doing CLIs because how else, if you have an, a CLI installed, is an agent gonna know that that CLI even exists in the first place? So it helps a lot with discovery of, uh, your tools that are available. Um, and they also help with, uh, using that tool effectively. So, uh, we have a skill that gets surfaced. It has a, a description that is able to come up whenever you ask anything about connectors, it knows to bring up that CLI and invoke it.
- 14:25
Um, and then the way that you structure the skill is also something to, um, think through. You know, you don't wanna put too much into the skill, uh, that you're gonna bog down the context. Um, skills have this, uh, ability to be separated out into references, um, where you can have a main skill that points to other files in a, in a skill directory, um, that can expand information about the, the different commands. And that really, uh, helps cut down the, the amount of, uh, of context that you're loading in and, um,
- 14:55
leverages the progressive discovery, um, ability of, uh, of these agents. Cool. And then another interesting fact, uh, for Auth side. Auth was interesting on the MCP side. It is interesting in other ways for CLIs because we can't assume that a human is gonna be present to able to interact with those prompts. Um, when CLIs are being invoked by agents, it can't sit there and wait for you to type, um, a prompt into the CLI. You have to
Keep tool counts small
After trial and error, Airbyte chose to keep its MCP tool count small.
Text in image
1. Keep tool counts small
- 15:24
expose things either through flags, um, or in the case of credentials, environment variables, and config files, um, so that things can be set up out of band and you don't have to wait for that, uh, whenever you're invoking the CLI. Um, and I would say aside from Auth, um, that's a general thing. A lot of CLIs that are built for humans, you type a, a command, and it'll wait there, ask you for prompts. Uh, and that is not, um, you know, able to be used properly by these
- 15:54
agents. Um, they'll just kinda get, get stuck there. Um, cool. So CLIs and MCPs, which one is better? Well, they both have kind of their own trade-offs. You know, the, with the MCP, the spec is not uniformly implemented across the board. Um, there's a bunch of limits that these providers decide to implement aside from the spec as well. For example, like Claude has a two-kilobyte limit on server and tool call, uh, descriptions. There's
Keep tool counts small
After trial and error, Airbyte chose to keep its MCP tool count small.
Text in image
1. Keep tool counts small
Both have their own tradeoffs
MCP clients impose varying limits, including timeouts that constrain long-running tasks. CLIs require package versioning and can let agents repeat wrong calls without guardrails.
Text in image
Both have their own tradeoffs MCP • Spec is not uniformly implemented across clients. Limits can be introduced, ie instruction and description size limits, tool call limits, timeouts, etc CLI • Versioning is required, harder to keep packages up to date with new features. • No guardrails - agents could continually make wrong calls if not instructed properly
- 16:24
a limit of how long the tools can run, so it's harder to do more long-running processes through MCP. Um, and uh, you know, there's, there's other kinda, kinda limits that they've introduced there. And then on the CLI, the cool things about MCP, like, you know, you could have a hosted MCP server that just is always updated. That's not quite the case with the CLI. You have to think more about versioning. It's harder to keep packages up to date, uh, with all these new features. Um, and there's no-- while the limits can be,
- 16:54
well, limiting on the MCP side, not having any of those on the CLI across the tools, uh, a-across the, the calls of the CLI can make things go wrong and continually go through loops that, um, you know, make the agent spin. And so really, I think both have their place. I think MCPs are great for those non-technical users to be able to quickly prototype things, build one-off reports, um, and even leverage that MCP ecosystem
Both have their place
Lopez positions MCP for non-technical users, quick prototypes and combining tools. He favors the CLI for longer tasks and large outputs, which users can process with pipes.
Text in image
Both have their place MCP • Non-technical users • Quick prototyping or one-off reports • Combining with other MCPs CLI • More technical users • Longer-running tasks and heavier requests • Better handling of larger responses, e.g. through piping to tail, jq, etc
- 17:24
to have things, uh, talk to each other. And then the CLI is better for those more technical users, more longer running tasks, maybe outputs that are super long and you need to leverage those, um, features that Unix and, and the pipes give you, where you can redirect output to a file, you can do a tail, do a head on that output. Um, that's where really the, the CLI, um, starts to, to shine. All right. That is basically all that I had.
Thank you
Pedro Lopez invites attendees to visit Airbyte’s booth and explore careers.
Text in image
THANK YOU Come work with me! airbyte.com/careers And check out our booth! @airbytehq @pedroslopez
- 17:54
Um, we have a booth over there at Airbyte, um, that you should check out and come work with us. Thanks.
AI Engineer World's Fair
AI Engineer World's Fair title card in white on black, with the event website below.
Text in image
AI Engineer World’s Fair HTTPS://AI.ENGINEER