<?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: Tomer Liran</title>
    <description>The latest articles on DEV Community by Tomer Liran (@tomer_liran).</description>
    <link>https://dev.to/tomer_liran</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%2F3927474%2F890158a7-c6fc-4e44-bc8e-014efef8f977.jpg</url>
      <title>DEV Community: Tomer Liran</title>
      <link>https://dev.to/tomer_liran</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tomer_liran"/>
    <language>en</language>
    <item>
      <title>I upgraded my AI concierge by turning it to a plain search box</title>
      <dc:creator>Tomer Liran</dc:creator>
      <pubDate>Mon, 29 Jun 2026 09:10:19 +0000</pubDate>
      <link>https://dev.to/tomer_liran/i-upgraded-my-ai-concierge-by-turning-it-to-a-plain-search-box-2nma</link>
      <guid>https://dev.to/tomer_liran/i-upgraded-my-ai-concierge-by-turning-it-to-a-plain-search-box-2nma</guid>
      <description>&lt;p&gt;I wanted &lt;a href="https://beachesofgreece.com" rel="noopener noreferrer"&gt;Beaches of Greece&lt;/a&gt; to be an AI concierge. You would describe your perfect beach day in plain language, and it would just understand you.&lt;/p&gt;

&lt;p&gt;Under the hood that meant a proper NLP stack: &lt;code&gt;wink-nlp&lt;/code&gt; for entities, compromise for parsing, a sentiment analyzer, fuzzy matching for place names. It felt smart.&lt;/p&gt;

&lt;p&gt;It mostly produced confident nonsense. So I deleted it and shipped a plain search box, and search got faster, smaller, and genuinely better. Here is what went wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "smart" version wasn't
&lt;/h2&gt;

&lt;p&gt;The failures were not subtle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;It scanned keywords as substrings, so "shade" matched inside "shaded", and "bar" (as in beach bar) matched inside "sandbar".&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Place lookup did &lt;code&gt;places.find(p =&amp;gt; query.includes(p))&lt;/code&gt;, so "ios" inside "agios nikolaos" resolved to the island of Ios. Wrong island, zero results.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"near heraklion" returned nothing. It made Heraklion (a city) a location filter, but beaches are filed under their island, Crete, so the filter could never match.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sentiment analysis scored "I hate crowds but love calm water" as mixed polarity. A fun trick that never changed which beaches to show.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every time, the stack performed the look of understanding, then did something a human never would. And when it was wrong, I had to debug a model's guess.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nobody writes paragraphs into a search box
&lt;/h2&gt;

&lt;p&gt;They list wants: calm, sandy, shade, parking, near somewhere. The vocabulary is small and knowable, so I matched against it literally, on whole-word boundaries:&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;hasPhrase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;q&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;phrase&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;boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// matches "bar" but not "sandbar"&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RegExp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`(?:^|[^a-z0-9])&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nf"&gt;escapeRegExp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;phrase&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;(?:[^a-z0-9]|$)`&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;q&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;That single boundary check erased the whole "bar inside sandbar" class of bug. The rest of the vocabulary is just data: lists of phrases mapped to filter values.&lt;/p&gt;

&lt;p&gt;Boring matching also forces decisions the NLP layer used to hide. "quiet" now means few people, not flat water. "no parking" is checked before "parking" so it wins outright. Each one is a product call sitting in plain sight instead of inside a model.&lt;/p&gt;

&lt;p&gt;Place names get the same treatment: whole-word, longest match, and every name resolves to an area that beaches actually live in, so "heraklion" maps to Crete instead of nuking the results. The one bit of fuzziness I kept is a tight typo fallback. And because each town carries a coordinate, "near heraklion" can now rank by real distance, which the AI version never managed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I gained, and gave up
&lt;/h2&gt;

&lt;p&gt;Gained: predictable and debuggable (a wrong result is a phrase to fix, not a model to retrain), faster, a smaller bundle, and honest. It does what a human would do with those words, no theater.&lt;/p&gt;

&lt;p&gt;Gave up: novel phrasing. Someone on Reddit instantly tried a mixed Greek-and-English query and it caught only half. Fair trade for this domain.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;"Add AI" is not free. It costs latency, bundle size, and worst of all legibility: when the clever thing is wrong, you cannot tell why. For a bounded problem with a knowable vocabulary, a search box that makes no claim to intelligence can be the smarter build.&lt;/p&gt;

&lt;p&gt;It is live at &lt;a href="https://beachesofgreece.com" rel="noopener noreferrer"&gt;beachesofgreece.com&lt;/a&gt;. Throw a weird query at it and tell me what breaks.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Add an MCP server to your SaaS in 10 minutes (free, no credit card)</title>
      <dc:creator>Tomer Liran</dc:creator>
      <pubDate>Tue, 12 May 2026 15:41:50 +0000</pubDate>
      <link>https://dev.to/tomer_liran/add-an-mcp-server-to-your-saas-in-10-minutes-free-no-credit-card-48h1</link>
      <guid>https://dev.to/tomer_liran/add-an-mcp-server-to-your-saas-in-10-minutes-free-no-credit-card-48h1</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Originally published on &lt;a href="https://bridge.ls/blog/add-an-mcp-server-to-your-saas-in-10-minutes-free-no-credit-card" rel="noopener noreferrer"&gt;bridge.ls/blog&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://thenewstack.io/why-the-model-context-protocol-won/" rel="noopener noreferrer"&gt;70% of large SaaS brands&lt;/a&gt; now ship a remote MCP server.. The other 30% are about to find out what happens when their competitors become agent-callable and they don't.&lt;/p&gt;

&lt;p&gt;If you're a SaaS founder or CTO who has been putting off MCP because the build looks expensive — multi-tenant auth, transport, hosting, credential management, the whole stack — this post is for you. We're going to take your existing OpenAPI spec and turn it into a live, hosted, agent-callable MCP server in about 10 minutes. Free tier. No credit card. No protocol code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why ship one now
&lt;/h2&gt;

&lt;p&gt;The case for MCP keeps getting harder to argue against. Anthropic, OpenAI, Google, and Microsoft all natively support it. &lt;a href="https://segmentstream.com/blog/articles/best-mcp-servers-for-marketers" rel="noopener noreferrer"&gt;Over 10,000 MCP servers existed&lt;/a&gt; by early 2026.. ChatGPT, Claude, Cursor, and every serious agent runtime can connect to a remote MCP endpoint with two clicks.&lt;/p&gt;

&lt;p&gt;For SaaS companies, the framing is competitive: the first product in each category that ships an agent surface owns the agent traffic. Your users' agents are already trying to interact with your product — they're just doing it badly, through brittle browser automation or hand-rolled API wrappers. An MCP server replaces all of that with a clean, structured surface.&lt;/p&gt;

&lt;p&gt;The blocker has never been "should we?" It's been "what does this cost to build and maintain?"&lt;/p&gt;

&lt;h2&gt;
  
  
  What you'd have to build yourself
&lt;/h2&gt;

&lt;p&gt;We covered the full picture in &lt;a href="https://bridge.ls/blog/mcp-infrastructure-lessons" rel="noopener noreferrer"&gt;What I Learned Building a Managed MCP Infrastructure Layer&lt;/a&gt;, but here's the short version of what stands between an OpenAPI spec and a production MCP server:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-tenant auth that scopes each call to the right customer&lt;/li&gt;
&lt;li&gt;Credential management for upstream API tokens (per-tenant, rotatable, never in logs)&lt;/li&gt;
&lt;li&gt;Streamable HTTP transport that survives load balancers and restarts&lt;/li&gt;
&lt;li&gt;Session handling, retries, rate limit translation&lt;/li&gt;
&lt;li&gt;Tool generation from your spec, with sensible defaults for what to expose and what to hide (you do not want DELETE endpoints agent-callable by default — see &lt;a href="https://bridge.ls/blog/fan-out-problem" rel="noopener noreferrer"&gt;The Fan-Out Problem&lt;/a&gt; for why tool surface design matters)&lt;/li&gt;
&lt;li&gt;Hosting, monitoring, audit logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://truto.one/blog/what-is-an-mcp-server-the-2026-architecture-guide-for-saas-pms/" rel="noopener noreferrer"&gt;Industry estimates put a custom build at $25k–$120k and 8–12 weeks&lt;/a&gt;, with annual maintenance adding 20–30% on top.. That's before you've shipped a single feature.&lt;/p&gt;

&lt;p&gt;Bridge does all of this from your existing OpenAPI spec. Here's what that looks like.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 10-minute walkthrough
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1 — Create your Bridge account
&lt;/h3&gt;

&lt;p&gt;Head to &lt;a href="https://app.bridge.ls/" rel="noopener noreferrer"&gt;app.bridge.ls&lt;/a&gt;. Name, organization, email. No password — you'll get a six-digit code. Free tier, no credit card.&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%2Fiz74s1lowicpngwu9g6m.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%2Fiz74s1lowicpngwu9g6m.png" alt="signup screenshot" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2 — Publish your MCP
&lt;/h3&gt;

&lt;p&gt;From the dashboard, drop your OpenAPI spec or MCP manifest into the publish flow. Bridge parses the spec and turns each operation into a tool.&lt;/p&gt;

&lt;p&gt;In this example we uploaded an OpenAPI spec with 159 operations. Bridge automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generated 141 tools (&lt;code&gt;DELETE&lt;/code&gt; endpoints are hidden by default — expose them only if you want agents performing destructive actions)&lt;/li&gt;
&lt;li&gt;Detected the auth method (Bearer token)&lt;/li&gt;
&lt;li&gt;Pulled the base URL&lt;/li&gt;
&lt;li&gt;Flagged that 159 operations is past the point where flat tool surfaces start hurting agent accuracy, and offered Smart Discovery to collapse the surface (more on tool-count tradeoffs in the &lt;a href="https://bridge.ls/blog/fan-out-problem" rel="noopener noreferrer"&gt;fan-out post&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%2Fyyfjglom0chf355qrik8.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%2Fyyfjglom0chf355qrik8.png" alt="Uploading mcp screenshot" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3 — Reserve your slug and go live
&lt;/h3&gt;

&lt;p&gt;Pick a public URL slug, confirm the summary, click Go 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.amazonaws.com%2Fuploads%2Farticles%2Flxzbhx82ayvzaqyqx0fv.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%2Flxzbhx82ayvzaqyqx0fv.png" alt="Publishing mcp screenshot" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4 — You're live
&lt;/h3&gt;

&lt;p&gt;That's the MCP server up. Endpoint ready. 141 tools exposed. Agents can call it right now.&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%2Frugtwz47jsu5ebxqhp18.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%2Frugtwz47jsu5ebxqhp18.png" alt="Published mcp screenshot" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But the server isn't useful yet without an end user. Which brings us to the part most MCP tutorials skip entirely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5 — Create an end user
&lt;/h3&gt;

&lt;p&gt;This is where Bridge does the work that takes weeks to build yourself: multi-tenant auth.&lt;/p&gt;

&lt;p&gt;Click "New end user." Bridge will issue an OAuth Client ID + Secret bound to this specific end user, plus collect the upstream Bearer token your API expects for that 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.amazonaws.com%2Fuploads%2Farticles%2Fct69r37pt721wmq26q8x.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%2Fct69r37pt721wmq26q8x.png" alt="Adding new mcp end user screenshot" width="800" height="476"&gt;&lt;/a&gt;&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%2Fx14trn2tajb44re74qe4.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%2Fx14trn2tajb44re74qe4.png" alt="Filling out mcp end user credentials" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Behind the scenes: Bridge stores the upstream token securely, the OAuth credentials it just issued are the credentials the agent uses, and every agent call gets translated to an authenticated call to your API as the right tenant. The token never touches the agent.&lt;/p&gt;

&lt;p&gt;After creating the end user, Bridge shows you the three values to send to that customer over a secure channel: MCP URL, OAuth Client ID, OAuth Client Secret. Client Secret is shown once. Copy now.&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%2Fq4l7q0la04ouxlzy2aq1.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%2Fq4l7q0la04ouxlzy2aq1.png" alt="Copy-paste credentials to give to end user" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6 — Connect from Claude Desktop
&lt;/h3&gt;

&lt;p&gt;This is what your customer does. In Claude Desktop, Settings → Connectors → Add custom connector.&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%2Fqtzp30yabm3yuprexa12.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%2Fqtzp30yabm3yuprexa12.png" alt="Claude Desktop custom connectors" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Paste the MCP URL, expand Advanced settings, paste Client ID and Client Secret. Click Add.&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%2Fcw1ngi8j0yyame6ub2l8.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%2Fcw1ngi8j0yyame6ub2l8.png" alt=" " width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The browser flashes briefly. The connector is ready.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 7 — Use it
&lt;/h3&gt;

&lt;p&gt;Open a new Claude chat. Ask it what tools it can use.&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%2Fqfwokb8qgawzm8ipw790.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%2Fqfwokb8qgawzm8ipw790.png" alt="Tools mcp usable in the end user screen" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;141 tools, scoped to that end user, authenticated, hosted, ready. Total time from signing up to a working agent call: about 10 minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's in the free tier
&lt;/h3&gt;

&lt;p&gt;Free, forever:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1 hosted MCP server&lt;/li&gt;
&lt;li&gt;Auto-generated tools from your OpenAPI spec&lt;/li&gt;
&lt;li&gt;Multi-tenant auth (the whole OAuth + upstream credential dance shown above)&lt;/li&gt;
&lt;li&gt;Up to 3 connected customers&lt;/li&gt;
&lt;li&gt;1,000 tool calls per month&lt;/li&gt;
&lt;li&gt;Community support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No credit card. The free tier exists because we want SaaS companies to ship their first agent surface without procurement friction. Once you outgrow 3 customers or 1k calls, paid tiers exist — but if you're testing the agent-callable thesis on your product, free covers it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;The 2026 MCP roadmap is moving fast: stateless transport, Server Cards for &lt;code&gt;.well-known&lt;/code&gt; discovery, enterprise auth patterns. Bridge handles all of these as the spec evolves — your MCP server gets the upgrades without you redeploying.&lt;/p&gt;

&lt;p&gt;If you want to read more on the engineering thinking behind Bridge, the &lt;a href="https://bridge.ls/blog/mcp-infrastructure-lessons" rel="noopener noreferrer"&gt;infrastructure lessons post&lt;/a&gt; covers the architectural decisions, and the &lt;a href="https://bridge.ls/blog/fan-out-problem" rel="noopener noreferrer"&gt;fan-out problem&lt;/a&gt; covers tool surface design.&lt;/p&gt;

&lt;p&gt;Otherwise — start at &lt;a href="https://app.bridge.ls/" rel="noopener noreferrer"&gt;app.bridge.ls&lt;/a&gt;. Your first MCP is 10 minutes away.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This post was originally published on &lt;a href="https://bridge.ls/blog/add-an-mcp-server-to-your-saas-in-10-minutes-free-no-credit-card" rel="noopener noreferrer"&gt;bridge.ls/blog&lt;/a&gt;. If you have feedback or questions, happy to discuss in the comments here or reach out at bridge.ls.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>saas</category>
      <category>claude</category>
    </item>
  </channel>
</rss>
