cd /news/ai-agents/no-mcp-no-problem-how-i-got-instinct… · home › topics › ai-agents › article
[ARTICLE · art-158717] src=dev.to ↗ pub= topic=ai-agents verified=true sentiment=↑ positive

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

A developer built an open-source bridge that lets Instinct AI, a WhatsApp/iMessage/SMS assistant without custom MCP server support, book flights through Duffel's test API by using a shared Google Sheet as an intermediary. The bridge polls the sheet every two seconds, routes calls through Swytchcode for key handling and policy checks, and requires Slack approval before booking; the developer reports it works but with lag, sheet-name confusion, and slow two-minute approval cycles.

by read4 min views3 publishedOct 27, 2026

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.

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

search, LON, NYC, 2026-10-30, morning, economy, 500. The rules I set:

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.

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.

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

swytchcode policy validate); the limits refused exactly what they should; the Slack approval named the flight and passenger. 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.

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.

── more in #ai-agents 4 stories · sorted by recency
── more on @instinct 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/no-mcp-no-problem-ho…] indexed:0 read:4min 2026-10-27 · —