Laravel AI SDK · MCP · PHP 8.3+

Add an AI agent to your Laravel app, without letting it touch your data unchecked

I build AI agents into existing Laravel and PHP products: agents that triage tickets, look things up in your database and propose what to do next, and MCP servers that let your customers run your product from Claude. Nothing that changes data runs until a person approves it, or until it falls under a limit you set. Two open-source demos are live, so you can try the approach before we talk.

Ask about a $500 Scoping Try the live demos

Fixed prices. I build on a copy or staging environment, never on your live system.

Two things I build

An agent inside your app

Built with the official Laravel AI SDK, in your codebase, using your models, policies and queues. The agent reads what it needs through tools you can review, and proposes changes that land in an approval inbox for your team.

Good for: support ticket triage and draft replies, back-office lookups ("which customers on the old plan were charged twice?"), refund and credit handling with limits, booking and scheduling assistants.

An MCP server for your product

A remote MCP server lets your own customers connect Claude or another AI assistant to your product and work in it by asking. They sign in with OAuth, pick an access level, and every booking, update or cancellation shows a preview before it happens.

Good for: B2B SaaS with a REST API whose customers already use AI assistants. It runs as its own small Laravel service in front of your API, so your main app doesn't have to be on Laravel at all.

What every agent I ship comes with

The hard part of an AI agent in a real business isn't getting the model to answer. It's making sure a wrong answer can't refund the wrong customer, run up a bill, or leak data. These are built in from the start, and each one is working in the demos below.

Approval before any change

Every write the agent proposes waits for a person. Your team can approve it, edit the arguments first, or reject it with a note the agent reads and adjusts to.

Limits that can't be gamed

Small, safe actions can run on their own, such as refunds under a set amount. The limit counts what was already done, so splitting one big refund into several small ones still reaches a person.

Tools scoped to the task

An agent working on one ticket can only see that ticket's customer and change that ticket. Text a stranger plants in a support message can't point it at other customers' data.

Spend caps per day

Each model provider gets a daily dollar limit, counted from real token usage and checked before every call. Plus per-run token caps and run limits, so a loop or a busy day can't surprise you on the invoice.

Two providers, automatic failover

Claude and OpenAI models side by side, each with its own limit. If one is down, rate limited or over budget, the agent moves to the other. Your API keys, your accounts, your bill.

A log you can read

Every action the agent proposed or ran, who decided, and what happened. For MCP servers, every tool call is logged with personal details masked, and staff can disconnect any assistant.

Tests that run the real agent loop

The test suite fakes the model provider's API, not the agent, so the real tool loop, pause, approval and resume all run on every change, offline and without an API key.

Reviewed for security

On TriageDesk, a security review found eight issues, such as split refunds and cross-ticket writes. Each one is fixed and has its own regression test, so it can't quietly come back.

Two live demos you can try today

Both are my own open-source projects, built to show how I work. They are not client projects. The companies and customers in them are fictional, and the demo data resets.

TriageDesk

An agent inside a Laravel app · Laravel 13 · Laravel AI SDK · Livewire 4 · MIT license

7tools, 3 gated
70+tests
8/8review fixes

A support desk for a made-up SaaS company. New tickets are classified automatically (category, priority, sentiment, summary). The agent then investigates with read-only tools and proposes replies, ticket changes and refunds, which wait in an approval inbox.

  • Refunds up to $50 run on their own, counted across the customer's recent refunds; anything bigger waits for a person
  • Reject a proposal with "check with billing first" and the agent changes course
  • A teammate can't approve actions on tickets they don't own; admins can
  • Visitors browse recorded real runs; live runs are behind an access code and daily dollar caps

Open the demo · Read the code on GitHub

Easy!Appointments MCP server

An MCP server in front of an existing app · Laravel 13 · Laravel MCP · Passport OAuth · MIT license

7tools
24/24live checks
40tests

Lets Claude act as the front desk of a booking system: find open times, look up customers, and book, reschedule or cancel appointments. Easy!Appointments itself is a CodeIgniter app; the MCP server sits in front of its REST API, so the booking system didn't change.

  • OAuth sign-in with a consent page; the booking system's admin token never leaves the server
  • Two access levels per connection: read-only, or front desk
  • Book, reschedule and cancel return a preview first; the change happens only on a confirmed second call
  • Listed in the official MCP Registry and tested end to end in Claude, including six calls at once

Case study with a 99-second video · Code on GitHub

Is this a fit?

A good fit

  • Your product runs on Laravel 12 or 13 (for an in-app agent), or has a REST API (for an MCP server)
  • You have one clear, repeated job in mind, like triaging tickets or answering "where is my order?"
  • Someone on your team can review the agent's proposals while it earns trust
  • You want code your own developers can read and maintain after I hand it over

Probably not a fit

  • A chat widget on a marketing site: there are cheaper off-the-shelf tools for that
  • An agent that moves money or deletes data with nobody watching
  • An app on an older Laravel or PHP version: upgrade it first, which I also do for a fixed price

How it works

  1. Scoping. We pick one job for the agent. I read the relevant part of your code, list the tools the agent needs, which of them change data, and what should need approval. You get a written plan and a fixed price.
  2. Build on a copy. I build in a branch against a staging copy of your app, with your API keys and spend limits set from day one.
  3. Tests and a review. The approval flow, limits and permissions get automated tests that run the real agent loop. Then I try to break it the way a hostile customer message would.
  4. Hand-over. You get a pull request, a short guide to how the agent decides what to do, and how to change its instructions, tools and limits. You deploy, or I help for a separate quote.
  5. 30 days of free fixes. Your team runs it with approvals on. For 30 days after hand-over, I fix problems in the agreed scope at no charge, because the first weeks with real data are when most issues show up.

Pricing

These are fixed-price packages for adding one agent, or one MCP server, to a product that already exists. Bigger AI projects, such as several agents, search over your documents, or a new product, are scoped and priced through QiYuan Labs' AI engineering practice.

Agent Scoping

$500

One-time · 5-day delivery

  • One job for the agent, agreed with you
  • Tool list, with each data-changing action marked
  • Approval rules, limits and a daily spend estimate
  • Risks and what won't be covered
  • A fixed-price quote for the build
Ask about scoping

In-app agent

from $3,500

Fixed price · about 2 weeks

  • One agent job in your Laravel 12 or 13 app
  • Up to about 8 tools, writes behind approval
  • Approval inbox and activity log in your admin
  • Daily spend caps, token caps, two providers
  • Tests that run the real agent loop offline
  • Hand-over guide and 30 days of free fixes
Start with scoping

MCP server

from $4,500

Fixed price · 2 to 3 weeks

  • Remote MCP server in front of your REST API
  • OAuth sign-in, consent page, read-only and write access levels
  • Up to about 8 tools designed around real tasks, not a copy of every endpoint
  • Preview-then-confirm on every change
  • Call log with personal data masked
  • Tested end to end in Claude
  • 30 days of free fixes
Start with scoping

Agent care

$500

Per month · cancel any time

  • Laravel AI SDK and MCP updates applied and tested
  • Model changes when providers retire or reprice models
  • Monthly review of the log and spend
  • Up to 2 hours of small changes (unused hours don't roll over)
Ask about it

Not included in the fixed price

  • Model usage: you pay your model provider directly, under your own account and limits
  • Upgrading an older Laravel or PHP version first (quoted separately)
  • Hosting, deployment and go-live support
  • New features in your app that the agent would need but don't exist yet

Questions

Which Laravel versions do you support?

An in-app agent uses the official Laravel AI SDK, which needs Laravel 12 or 13 and PHP 8.3 or newer. If your app is older, the Scoping tells you what an upgrade involves first. An MCP server is a separate small service that talks to your app's API, so your main app can be on any version, or not on Laravel at all.

Which AI models do you use?

By default, Claude from Anthropic and OpenAI's models together, each with its own daily limit, with automatic failover between them. The Laravel AI SDK supports other providers too, and switching is a configuration change. The keys and accounts are yours, so you see exactly what you spend.

What will the AI cost us to run?

It depends on volume and on which models do which job. The Scoping includes an estimate based on your numbers, and the build sets hard daily dollar limits checked before every model call. As a reference, the public TriageDesk demo is capped at $3 a day on Anthropic and $6 on OpenAI.

Will the agent make mistakes?

Sometimes, yes. In one recorded TriageDesk run, a drafted reply told the customer their case was with the billing team when nobody had passed it on. I added a rule to its reply instructions, and a later run still slipped in a similar line. That's exactly why replies and changes wait for a person, why there's a log, and why I treat instructions as something you tune over time, not a guarantee.

Where does our data go?

To the model provider you choose, under your own account, and only what the agent's tools return. Tools are scoped so the agent sees what the task needs and no more. If your system holds health or payment card data, tell me at the start so we agree on what the agent may see.

Do you need access to our live system?

No. I build against a staging copy, and by default you deploy. If you'd like me to help with go-live, I'll quote it separately and only touch production with your written go-ahead.

We're an agency. Can you build this for our clients?

Yes. I can work under your name, in your repository and your conventions, with you as the client contact.

Who are you?

I'm Bo Zeng, a PHP developer with 18 years of experience. I run QiYuan Labs LLC, a US company registered in Wyoming, and work remotely. Both demos above are my own work. Email hello@qiyuanlabs.ai with any question.

Have one job you'd hand to an agent if you could trust it?

Tell me what it is and what your app runs on. I'll reply with whether it's a fit and what the Scoping would cover.

Email hello@qiyuanlabs.ai