Connect any AI to your eGrow account
One Model Context Protocol server. Many AI clients — Claude, ChatGPT, Gemini, and any future client that speaks MCP.
Auth
The server speaks Streamable HTTP and follows the authenticated remote MCP spec. Pick whichever path your client supports — both run side by side on the same endpoint:
https://mcp.egrow.com/mcp
OAuth 2.1 (recommended)
Hosted clients (ChatGPT, claude.ai, Claude Desktop, Cursor, Codex…) auto-discover the auth server
via /.well-known/oauth-protected-resource. With Dynamic Client Registration enabled,
the client registers itself, opens an eGrow consent screen, and stores the access token —
refreshing silently afterwards. Nothing to set up ahead of time.
API key (fallback)
Use this for Claude Code, cURL, custom adapters, plans without Connectors, or workspace policies
that block third-party OAuth flows. Settings → API Tokens → Create token; the value starts
with egrow_. The server accepts it via X-API-Key, X-Egrow-API-Key, or
Authorization: Bearer <key>.
Clients
Per-client setup. Pick yours.
Claude Code
claude mcp add --transport http egrow https://mcp.egrow.com/mcp
Then run /mcp in a Claude Code session and complete the OAuth flow. To pin a long-lived API key instead, append --header "X-API-Key: egrow_YOUR_API_KEY".
Skip per-tool permission prompts by editing ~/.claude/settings.json:
{
"permissions": {
"allow": ["mcp__egrow"]
}
}
Claude Desktop
Settings → Connectors → Add custom connector. Name eGrow, URL https://mcp.egrow.com/mcp, default auth (OAuth). Click Connect; the eGrow consent screen opens and stores the token.
Or pin an API key via the config file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"egrow": {
"type": "http",
"url": "https://mcp.egrow.com/mcp",
"headers": {
"X-API-Key": "egrow_YOUR_API_KEY"
}
}
}
}
claude.ai
Available on Pro / Team / Enterprise. Settings → Connectors → Add custom connector. Name eGrow, URL https://mcp.egrow.com/mcp, auth OAuth. Click Connect and approve.
If OAuth is blocked by workspace policy, switch to Custom Header with X-API-Key: egrow_YOUR_API_KEY.
ChatGPT
Available on Pro / Team / Enterprise. Settings → Connectors → Browse Connectors → Create. Name eGrow, MCP Server URL https://mcp.egrow.com/mcp, auth OAuth, check I trust this application, then Create. Toggle the connector on per chat with + → Connectors.
Fallback: pick Custom / API Key auth with header X-API-Key: egrow_YOUR_API_KEY.
Cursor
One-click install: Add eGrow to Cursor — opens Cursor and registers the server. Or open Cursor → Settings → MCP and add a custom server pointing at https://mcp.egrow.com/mcp.
VS Code
CTRL/CMD + P → MCP: Add Server → Command (stdio), then enter:
npx mcp-remote https://mcp.egrow.com/mcp
Name it eGrow. Or paste this into your settings.json:
{
"mcpServers": {
"egrow": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.egrow.com/mcp"]
}
}
}
Windsurf
CTRL/CMD + , → Cascade → MCP servers → Add custom server:
{
"mcpServers": {
"egrow": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.egrow.com/mcp"]
}
}
}
Zed
CMD + , to open settings, then:
{
"context_servers": {
"egrow": {
"source": "custom",
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.egrow.com/mcp"],
"env": {}
}
}
}
Codex
codex mcp add egrow --url https://mcp.egrow.com/mcp
Codex prompts you to log in and connect. If this is your first MCP in Codex, enable the rmcp feature in ~/.codex/config.toml:
[features]
experimental_use_rmcp_client = true
Gemini
Gemini doesn't speak MCP natively — point a thin adapter at the server URL above and convert the tool list to Gemini's function-calling format. The eGrow Laravel AI Assistant already uses this pattern internally and is the reference implementation.
cURL
Initialize handshake:
curl -X POST https://mcp.egrow.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-API-Key: egrow_YOUR_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": { "name": "probe", "version": "0.1" }
}
}'
Call a tool:
curl -X POST https://mcp.egrow.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-API-Key: egrow_YOUR_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "whoami",
"arguments": {}
}
}'
Others
Hundreds of tools now support MCP. For clients that only speak stdio, use the mcp-remote bridge:
- Command:
npx - Arguments:
-y mcp-remote https://mcp.egrow.com/mcp - Environment: none
Try a prompt
Once your client is connected, paste any of these into a chat. The assistant picks the right tool on its own — no need to know tool names.
Quick lookups
How many orders did I get this week?
Show me order EGW100
Who are my top 5 customers this month?
Which products have stock under 10?
Actions
Refund the broken speaker on order EGW100
Move all "Pending" orders from yesterday to "Processing"
Send a quick reply to the conversation with Karim
Onboard a new customer: Sara Bensaid, +212600112233, Casablanca
Insights
What's my confirmation rate this week vs last week?
Which courier has the worst delivery rate this month?
What you can ask
44 tools across 8 domains. Each ships with a whenToUse / whenNotToUse guide and inline examples — the AI picks the right one without hand-holding. Counts and verb summaries below are read live from the running registry.
-
Orders 11 find · get · create · update · bulk · modify · merge
bulk_move_stagewriteMove all orders from one pipeline stage to another.create_orderwriteCreate an order. Supports both basic (customerId + lines) and full (nested customer + addresses + lines) shapes.find_duplicate_ordersreadIdentify candidate duplicate order groups.find_ordersreadSearch orders using the same free-text search the eGrow UI uses.get_confirmation_statsreadConfirmation funnel counts (pending / confirmed / cancelled) matching the same free-text query as find_orders.get_orderreadFetch a full order by id, order number, tracking number, or store order id.get_order_statsreadAggregate order metrics (total/paid/pending/refunded) matching the same free-text query as find_orders.merge_ordersdestructiveMerge duplicate orders into a primary.modify_line_itemsdestructiveRemove line items from an unfulfilled order, or refund line items on a paid order.modify_orderwriteAttach/detach a customer, assign agents, or swap a line item's variant on an existing order.update_orderwriteUpdate an order's editable fields (notes, addresses, custom attrs, stage).
-
Customers 10 find · get · create · update · modify · bulk · add · merge · flag
add_customers_to_groupwriteAdd customers to a customer group (segment).bulk_blacklist_customerswriteBlacklist or unblacklist multiple customers.create_customerwriteCreate a new customer.find_customersreadSearch customers using the same free-text search the eGrow UI uses.find_duplicate_customersreadFind candidate duplicate customer groups.flag_customers_as_duplicatewriteMark a set of customers as confirmed duplicates without merging yet.get_customerreadFetch a customer by ID with addresses and groups. Optionally include risk profile.merge_customersdestructiveMerge duplicate customers into a single primary record.modify_customer_addresswriteAdd, edit, or default a customer's shipping/billing address.update_customerwriteUpdate an existing customer's profile (name, email, phone).
-
Products 7 find · get · create · update
create_productwriteCreate a new product with variants and options.find_categoriesreadList or search product categories.find_productsreadSearch products using the same free-text search the eGrow UI uses.find_variantsreadSearch product variants using free-text query.get_productreadFetch a product with variants, options, media, and category.get_variantreadFetch a single variant by ID.update_productwriteUpdate an existing product.
-
Automations 4 find · create · update · install
create_automationwriteCreate an empty automation (only its entry node), switched off, to build afterwards with apply_changes.find_automation_templatesreadSearch the public automation templates: ready-made automations that install_automation_template adds to this account by key.install_automation_templatewriteCreate a new automation in this account from a public template, by the key find_automation_templates returns.update_automationwriteRename an automation or change its description or notes. Its flow and whether it is on stay as they are.
-
Discovery 4 describe · whoami · health · get
describe_capabilitiesList or search the available tools. Optionally filter by domain, or fuzzy-find by intent.get_workflowFetch a named workflow playbook.health_checkServer version, GraphQL reachability, tool count.whoamiIdentify the calling user, account, currency, and permissions.
-
Analytics 3 dashboard · analytics · utm
get_analyticsreadFetch any analytics report — orders, confirmations, shipping, or agents — over a date range.get_dashboardreadFetch any dashboard widget by name (overview, revenue, top cities, top products, shipping partners, financial metrics, etc.).get_utm_analyticsreadUTM-attributed performance: totals or breakdown by source/medium/campaign/status.
-
Escape hatch 3 schema · query · mutation
graphql_mutationescapeExecute an arbitrary mutation against the eGrow GraphQL API (docs: https://api5.egrow.com/docs/api/graphql). Audited.graphql_queryreadExecute an arbitrary read-only query against the eGrow GraphQL API (docs: https://api5.egrow.com/docs/api/graphql).graphql_schemaInspect the live eGrow GraphQL schema. Use to look up exact field names before writing graphql_query / graphql_mutation.
-
Pipelines 2 list · get
get_pipelinereadFetch a pipeline with full stage detail.list_pipelinesreadList all order pipelines and their stages.
Workflows
Some asks span multiple steps. The assistant follows a documented playbook for these — you describe the outcome, it handles the sequence.
- Order confirmation — "Confirm the pending orders from this morning"
- Order refund — "Refund the broken speaker on order EGW100"
- Order cancel — "Cancel order EGW242, customer changed her mind"
- Exchange — "Customer wants to swap the red shirt for blue on order EGW88"
- Customer merge — "Merge these two profiles, the second one is the duplicate"
- Customer onboard — "Onboard Karim, +212612345678, Rabat, marketing opt-in"
- Diagnose failed delivery — "Why didn't order EGW100 reach the customer?"
FAQ
Will my OAuth token refresh automatically?
Yes. The auth server issues rotating refresh tokens — access tokens last 1 hour, refresh tokens last 30 days. ChatGPT, Claude, and any compliant MCP client refresh silently. After 30 days of total inactivity you'll be prompted to re-consent once.
Can I authenticate with an API key instead of OAuth?
Yes. Generate one in Settings → API Tokens and pass it as X-API-Key, X-Egrow-API-Key, or Authorization: Bearer <key>. Both auth modes run on the same endpoint at the same time.
Does the server support Streamable HTTP?
Yes — at https://mcp.egrow.com/mcp. The server follows the authenticated remote MCP spec (2025-03-26).
I'm getting an internal server error when connecting.
Clear cached MCP auth state and reconnect: rm -rf ~/.mcp-auth. If you're using mcp-remote as a bridge, also make sure your Node.js is up to date.
My client doesn't speak Streamable HTTP — what now?
Use the mcp-remote bridge: npx -y mcp-remote https://mcp.egrow.com/mcp. It exposes the remote server over stdio so any stdio-only MCP client can connect.
Are destructive operations safe?
Yes. Every tool that changes data (create, update, delete, merge, refund) is marked destructive in its MCP annotations, so clients like Claude ask for your approval before running it. Read-only tools are marked read-only.
Notes & limits
- Tools that change data are marked destructive, so clients like Claude ask for your approval before each call.
- Every tool call is scoped to the calling user's account by the credential. No cross-tenant leakage.
- Rate limits per credential: 300 reads/min · 60 writes/min · 20 escape-hatch/min.
- Stateless and horizontally scalable.
- Uniform response shape: list tools return
{ items, page, perPage, total, hasMore }; errors return{ error: { code, message, hint, retry_safe } }.