DEV Community

No MCP? No problem. How I got Instinct AI to call a flight API

Instinct is an AI assistant you text on WhatsApp, iMessage or SMS. It works through the accounts you connect: Gmail, Calendar, Drive and Sheets, Notion, Slack, GitHub and a few more.

I wanted to see what happens when you need something outside that list. When I asked whether I could plug in my own MCP server (MCP is the usual way to give an AI assistant new tools), it said: I can't confirm that one. I don't have a way to plug in a custom MCP server today, so I won't promise it.

Fair enough. But it can edit a Google Sheet. So the question for this experiment was: can a shared spreadsheet work as a go-between for Instinct and an API it doesn't know about? I picked flight booking through Duffel, in test mode (a fake airline, no real money), because it involves money, so I'd need limits and approvals too.

Short answer: yes, it works, with some lag and a few rough edges. Here's how it fits together, and what I found.

How it works

Me (WhatsApp) | v Instinct AI <-> Google Sheet <-> bridge writes rows, checks every 2s, reads results writes results | v Swytchcode (holds keys, checks rules) / | \ Duffel Resend Slack flights email approvals

  • Instinct writes a row in a Google Sheet. The sheet has a "How to use" tab that tells it which columns to fill, like search, LON, NYC, 2026-10-30, morning, economy, 500.
  • A small Python script (the bridge) checks the sheet every 2 seconds and makes the API calls: a flight search, the latest price, then the booking.
  • The calls go through Swytchcode, which holds the API keys and checks each call against a rules file before it goes out. I work on Swytchcode, so part of the point was to see how it holds up in a setup like this.
  • The bridge writes the result back into the row, and Instinct reads it out.

The rules I set:

  • No ticket over $300, no more than $500 or 2 bookings a day.
  • Bookings over $100 need my OK in Slack.
  • Only flights that a search actually returned can be booked.
  • Only the API calls this needs, and only this one sheet in my Google account.

What a run looks like

Here's the whole thing, from the first WhatsApp message to the confirmation email:

It starts in the WhatsApp chat:

Me: Find me a flight from London to New York on Friday under $500.

Instinct: Trips returned three nonstop options for Friday, October 30: Iberia $215.62, Duffel Airways $222.21, American Airlines $225.24.

Me: Book option 1.

Instinct tells me to approve it in Slack. A Slack message arrives with the flight, the passenger and the price. I tap Approve, and a couple of minutes later Instinct replies with the booking reference and the confirmation email lands in my inbox.

When I asked for a business-class seat over $300, the rule refused it and Instinct passed on the reason.

What I found

Instinct was good at the spreadsheet part. It followed the "How to use" tab closely, and once pointed out, unprompted, that the results didn't match the "morning" I'd asked for.

But it's not live. Instinct reads the result when it next looks at the sheet. Sometimes that was right away, sometimes only when I asked "did it go through?" A sheet is a workaround, not an integration.

It got confused by two sheets with the same name. I had an old "Trips" sheet, and Instinct kept using it. Giving it the sheet's URL fixed that.

Approvals are slow. After I tap Approve, the booking goes through at Swytchcode's next check, which runs every 2 minutes. So the bridge tells Instinct the time to expect it.

After an approval, the bridge never sees the reply. Swytchcode makes the approved call itself, later. So the bridge tags each booking and looks it up in Duffel afterwards.

A code review also caught a case I'd missed: if a call times out, you don't know whether the booking happened, so the bridge now checks before saying "not booked", instead of inviting a second booking.

Duffel's test mode ignores the departure time, so the bridge filters by time itself.

Setup isn't quick yet. For now you need your own Google OAuth client and your own Slack bot. Steps are in the README.

How Swytchcode did

Since I work on it, I tried to be honest about this part. The short version:

  • Worked well: the bridge has no API keys at all; the rules file was easy to write and comes with tests (swytchcode policy validate); the limits refused exactly what they should; the Slack approval named the flight and passenger.
  • Rough: two-minute approvals; an empty Resend endpoint in our registry that I had to patch in the project; no ready-made Google Sheets connection or shared Slack bot yet; the occasional duplicate Slack post.

Try it

The code is open source:

git clone https://github.com/swytchcodehq/swytchcode-examples
cd swytchcode-examples/instinct-book-my-trip/instinct-bridge
./setup.sh

It needs Docker, and walks you through the keys and sign-ins. If you don't have Instinct, docker compose run --rm bridge python check.py runs the same flow without it, and any assistant that can edit a Google Sheet can drive it.

Would I use this?

As an experiment, it answered my question: a spreadsheet is enough to get an assistant like Instinct talking to an API it has no connector for, and keeping the keys and rules outside the assistant made me comfortable letting it near a booking API.

For everyday use, the lag and the setup are the weak spots. Assistants that support MCP can skip the sheet entirely, and that's what I want to try next.

Disclosure: I work on Swytchcode. This is a pattern built on top of Instinct AI, not an Instinct feature, and I have no affiliation with Instinct AI.

Read on DEV Community ↗ ← Back to News

Comments

No comments yet. Start the discussion.