Connect a service you already use, or upload one of our starter programs to your own hosting. Your assistant then answers with real bookings, orders and account details.
Find your business
How it works
MCP (Model Context Protocol) is an open standard for connecting AI assistants to other software. An MCP server offers a list of tools, such as find_slots or my_orders. You connect it once in MagizAI, choose which tools the assistant may use, and from then on it calls them whenever a visitor's question needs one.
01
Connect
Skills, then MCP servers. Paste the https address and the token. MagizAI reads the list of tools.
02
Choose the tools
Press Manage. Tick the tools to use. Anything unticked is never called.
03
Safe or Sensitive
Safe tools run straight away. Sensitive tools wait until the visitor types back a six-digit code, so nothing changes without their go-ahead.
04
Tie accounts to the sign-in
For a tool that reads one customer's data, set its email or account argument to "Filled from the signed-in visitor". It is then never taken from the chat.
Limits to design for
These are the real limits of the MagizAI side. A server built within them works first time.
Limit
Value
What it means for you
Transport
Streamable HTTP over https
The address must be public. Servers that only run on a computer (stdio) cannot be connected.
Sign-in
None, Bearer token, custom header, or username and password
Services that only offer an OAuth login cannot be connected yet.
Time per call
10 seconds
The visitor is waiting for the reply. Answer from an index or cache, not a slow report.
Result read by the assistant
First 1,500 characters
Return short, factual text: five results with the key facts, not a whole record.
Tools per server
50
Keep one server per job. A few clear tools work better than many overlapping ones.
oneOf, $ref, pattern and lists of objects are not supported yet. A tool that uses them shows "Cannot be used".
Servers per workspace
Set by your plan
Skills, then MCP servers shows how many your plan allows.
Signed-in customers
Tools such as "my orders" or "my appointments" must only ever show the signed-in customer's own data. MagizAI does this with a signed identity token from your website, never with what the visitor types.
In MagizAI, open the chatbot, find Signed visitor identity and generate a secret. Keep it on your server.
When a customer is signed in to your website, your backend signs a short token (HS256) with their email and an expiry, and puts it on the widget tag as data-identity.
In the MCP tool settings, set the email argument to "Filled from the signed-in visitor". MagizAI fills it from the verified token and refuses the call if the visitor is not signed in.
<?php
// On your server, for the signed-in customer. $secret comes from the chatbot's
// "Signed visitor identity" setting and never goes to the browser.
function magiz_identity(string $email, string $name, string $secret): string
{
$b64 = fn ($s) => rtrim(strtr(base64_encode($s), '+/', '-_'), '=');
$head = $b64(json_encode(['alg' => 'HS256', 'typ' => 'JWT']));
$body = $b64(json_encode([
'email' => $email,
'name' => $name,
'iat' => time(),
'exp' => time() + 3600,
]));
return "$head.$body." . $b64(hash_hmac('sha256', "$head.$body", $secret, true));
}
?>
<script src="https://magiz.ai/widget.js" data-key="YOUR_WIDGET_KEY"
data-identity="<?= magiz_identity($user->email, $user->name, $secret) ?>" defer></script>
The token must include exp and can last at most 24 hours. The secret never goes in the browser; only the finished token does. WHMCS sites get this from our WHMCS module automatically.
Examples by business
Each business type has a real use case, a sample conversation, and two ways to do it: a service you can connect today, or a starter program you upload to your own hosting and point at your own data.
Use the WHMCS module. Hosting companies do not need an MCP server: the MagizAI module for WHMCS answers invoices, services, domains and tickets for signed-in clients, and shows your plans as cards.
Students search courses by subject and start date, and signed-in applicants check where their application stands.
Sample conversation
Visitor: When does the Python course start and are there seats?
Assistant: Data science with Python (DS201) starts in about a month, runs 16 weeks on Tuesdays and Thursdays 18:00-20:00, and costs Rs 24,000. Only 3 seats are left.
Visitor: I applied already, what's my status?
Assistant: Your application APP-2231 needs one document: please upload your class 12 marksheet in the student portal.
Set the tools like this
find_coursesSafe
my_applicationsSafe· email filled from the signed-in visitor
Guests check room availability for their dates, compare tour packages and send a booking request.
Sample conversation
Visitor: Room for 2 from next Friday for 3 nights?
Assistant: Yes. A deluxe double with lake view is Rs 4,500 a night, Rs 13,500 for 3 nights, breakfast included. The houseboat room is Rs 6,500 a night with dinner too. Which would you like?
Visitor: What Gulmarg trips do you have?
Assistant: The Srinagar and Gulmarg package is 4 nights at Rs 18,500 per person, with a houseboat night, the Gulmarg day trip with gondola tickets and airport transfers.
These services run an MCP server of their own that MagizAI can connect to with a key. Give every key the smallest permissions that do the job: the assistant can only do what the key allows.
Service
Address
Sign-in
Good for
Shopify Storefront
https://{your-shop}.myshopify.com/api/mcp
https://{your-shop}.myshopify.com/api/ucp/mcp
None
Product search, cart, and your store policies and FAQs. Connect both addresses: product search is on the second one.
Stripe
https://mcp.stripe.com
Bearer: a restricted key (rk_…)
Looking up payments, invoices and subscriptions. Give the key read permissions only.
Zapier
https://mcp.zapier.com/api/v1/connect
Bearer: your Zapier MCP token
Any action you set up in Zapier, across thousands of apps. The easiest way to reach a system that has no MCP server.
Make
https://<your zone>/mcp, shown in Make
Bearer: your Make MCP token
Your Make scenarios, each one a tool.
n8n
The production URL of an "MCP Server Trigger" node
Bearer or custom header
Any workflow you build. Self-hosted n8n keeps customer data on your own server, which suits clinics.
Airtable
https://mcp.airtable.com/mcp
Bearer: a personal access token
Bases such as course lists or property listings. Limit the token to the bases the assistant needs.
Linear
https://mcp.linear.app/mcp
Bearer: an API key
Issues and projects, for questions like "is the bug I reported fixed yet?".
Atlassian
https://mcp.atlassian.com/v2/mcp
Username and password: your email and an API token
Jira and Confluence. An organisation admin must allow API-token sign-in first.
WordPress and WooCommerce
The WordPress MCP Adapter (and WooCommerce's MCP, a developer preview) sign in with a WordPress username and an application password. Choose "Username and password" in MagizAI. The official guides use a local proxy, so test the direct connection on a staging site first.
Not usable yet
HubSpot, Notion, Square, Cal.com and Calendly only allow an OAuth login on their hosted MCP servers, which MagizAI does not support yet. Reach them through Zapier, Make or n8n instead. Supabase works, but its token opens your whole account, including running SQL, so do not connect it to a customer-facing assistant.
Run a starter program
Each starter is a small PHP program with no dependencies. It runs on ordinary shared hosting, comes with demo data so it works the moment you upload it, and has one tools.php file to point at your own database. Needs PHP 7.4 or newer with PDO (SQLite for the demo data, or MySQL).
Download the starter for your business and upload its folder to your website, for example to public_html/mcp/.
Copy config.sample.php to config.php and set token to a long random secret. The server refuses to run with the sample token.
Check it answers. The command below should list the tools.
In MagizAI, connect it with the address of index.php and Bearer token authentication, then set the tools as shown on its card.
Ask your assistant a question from the chat on your own site. Recent tool calls on the server page shows each call.
Use your real data
Set dsn, db_user and db_pass in config.php to your MySQL or MariaDB database, and change the SQL in tools.php to your own tables. Each tool is one block: a name, a one-line description of when to use it, its arguments, and a function that returns short text.
<?php
// tools.php: one block per tool. $db is a PDO connection from config.php.
$server->tool(array(
'name' => 'my_orders',
'description' => 'Use when a signed-in customer asks where their order is.',
'inputSchema' => array('type' => 'object', 'properties' => array(
'email' => array('type' => 'string', 'maxLength' => 190),
), 'required' => array('email')),
'annotations' => array('readOnlyHint' => true),
'handler' => function (array $args) use ($db) {
$q = $db->prepare('SELECT number, status, tracking FROM orders
WHERE email = ? ORDER BY placed_on DESC LIMIT 5');
$q->execute(array($args['email']));
$out = array();
foreach ($q->fetchAll() as $o) {
$out[] = "#{$o['number']}: {$o['status']} {$o['tracking']}";
}
return $out ? implode("\n", $out) : 'No orders found.';
},
));
Included .htaccess lets the web reach index.php only. On nginx, add the same rule yourself, or the demo database could be downloaded.
Build your own
Any language works if it speaks Streamable HTTP. These are the maintained options.
npm i @modelcontextprotocol/server @modelcontextprotocol/node
Go
modelcontextprotocol/go-sdk
mcp.NewStreamableHTTPHandler(...)
WordPress and WooCommerce: install a plugin instead
Your shop already holds the products, the stock and the orders. Install the plugin, tick what the assistant may use, and it answers from WooCommerce live: search and stock, delivery cost to a postcode, a discount code a shopper typed, and a signed-in customer's own orders and tracking. 32 tools, no code to write.
The same idea as the PHP starters, written for the Next.js App Router with no dependencies: the endpoint, seven example tools (plan, usage, invoices, billing link, password reset, support ticket), the code that signs a customer's identity, and the chat widget that follows sign-in and sign-out. Tested against MagizAI's own client.
Write one clear sentence per tool saying when to use it. The assistant picks tools by reading these descriptions.
Mark look-ups with readOnlyHint and anything that deletes or cancels with destructiveHint. MagizAI never lets a destructive tool be marked Safe.
Validate every argument on your side too, and limit each query to the signed-in customer's own rows.
Return short text with the facts the assistant needs. Never return passwords, full card numbers or internal notes.
Treat a tool call like any public API request: check the token, log it, and rate-limit it.
Troubleshooting
What you see
What to do
The server must be reachable on the public internet over https.
The address is private, local or not https. Put the server on a public https address.
Your plan does not include MCP servers. Upgrade to connect one.
Upgrade under Billing. Your tool settings are kept and come back when the plan allows them.
Cannot be used: …
The tool's arguments use a form MagizAI does not support yet. Keep them to text, numbers, true/false, fixed choices and simple lists.
Changed on the server — review and save to use it again
The tool changed on the server. Open the server, check the tool, and save.
Connection fails with 401
The token in MagizAI does not match config.php. On Apache, the included .htaccess passes the Authorization header through; some hosts need it.
"Set a secret token in config.php"
The starter is still on the sample token. Set a real one in config.php.
"This needs the visitor to be signed in."
The tool is tied to the signed-in visitor, and this visitor is not signed in, or their identity token failed. Check Signed visitor identity on the chatbot.
No tool call appears
The assistant never uses a tool: check it is ticked, its skill is on under Skills, and its description says clearly when to use it.
Stuck on a connection?
Send us the server address and what you see. We will tell you what is wrong.