尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Maison: a LINE MINI App demo on Strapi MCP, with a concierge agent and LINE confirmations
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Maison: from UX to AX with Strapi MCP
A demo for a fictional luxury house: a LINE app, an AI concierge and staff in the Strapi admin all work through one Strapi plugin and Strapi's built-in MCP server.檢視完整 README ↗A demo for a fictional luxury house: a LINE app, an AI concierge and staff in the Strapi admin all work through one Strapi plugin and Strapi's built-in MCP server.
Maison is a fictional luxury house of trunks, bags and small gifts. Its customers browse the catalog in an app built for LINE (a LIFF app), ask a concierge for a gift, and request a boutique visit. Staff confirm the request in the Strapi admin, and Strapi sends the customer's confirmation on LINE.
In the title, UX is the screens a customer taps, and AX is an agent that acts for the signed-in customer through the same tools. Everything goes through the Maison plugin: MCP tools on Strapi's MCP server for the app, the concierge and staff agents, a REST API for websites, and admin routes for the Maison page. In local mode, LINE sign-in is simulated with LINE's official LIFF mock and a local stand-in for LINE's ID token verify endpoint. Everything else runs as it does in production.
The demo was built for "Building the AI-Powered Connected Experience" (QBurst and LY Corporation, Tokyo, 7 October 2026). It follows LINE's MINI App design guidelines, so it can also run as a LINE MINI App.
flowchart LR
customer(["Customer"])
staff(["Staff"])
website(["Website"])
subgraph vercel["Vercel"]
app["LINE app<br/>Next.js"]
concierge["Concierge<br/>Claude, via the AI SDK"]
end
subgraph strapicloud["Strapi Cloud"]
oauth["strapi-oauth-mcp-manager<br/>customer sessions"]
subgraph maison["Maison plugin"]
mcp["MCP tools<br/>/mcp"]
rest["REST API<br/>/api/maison"]
adminroutes["Admin routes<br/>Maison page"]
services["Service layer"]
end
end
subgraph lineplatform["LINE"]
login["LINE Login"]
messaging["Messaging API"]
end
haiku["Claude Haiku"]
customer --> app
app -->|"signs in"| login
app -->|"exchanges the ID token"| oauth
oauth -->|"verifies the ID token"| login
app -->|"tool calls"| mcp
app -->|"chat"| concierge
concierge -->|"tool calls"| mcp
website --> rest
staff --> adminroutes
mcp --> services
rest --> services
adminroutes --> services
services -->|"labels inquiries"| haiku
services -->|"sends confirmations"| messaging
messaging -->|"LINE message"| customer
In local mode, Strapi, the app and a LINE verify mock run on one laptop, and the concierge uses a local model unless liff/.env has a Claude key.
You need Node.js 22.12 or later and npm, and a model for the concierge (see Requirements).
git clone https://github.com/PaulBratslavsky/maison-demo.git
cd maison-demo
npm install # installs strapi/ and liff/, builds the Maison plugin, creates both .env files with new secrets
npm run dev # Strapi on :1338, the app on :3003 and the LINE verify mock on :4545, all on 127.0.0.1
The first start builds Strapi's admin, which takes a minute. Then, in a second terminal:
npm run setup # the demo admin, the catalog and its public REST reads, the tokens and the app's OAuth client
Stop npm run dev (Ctrl-C) and start it again, so the app reads its OAuth client. Then open:
localhost: Strapi's CORS allows the app at http://localhost:3003, not at http://127.0.0.1:3003.DEMO_ADMIN_EMAIL and DEMO_ADMIN_PASSWORD: open strapi/.env in your editor to read them. npm install generated the password for your copy, and nothing prints it.To try the whole flow, open Ask the concierge in the app and tap the first suggestion. The concierge suggests a gift and shows the Book a visit form, filled in. Tap Send request, then press Confirm on the Maison board.
Node.js 22.12 or later, and npm.
A model for the concierge. Keys go in liff/.env. Restart the app after changing it.
Key in liff/.env | Model |
|---|---|
| none (the default) | qwen3-14b-32k on Ollama at http://localhost:11434/v1 (OLLAMA_MODEL, OLLAMA_BASE_URL) |
ANTHROPIC_API_KEY | Claude Sonnet 5 |
AI_GATEWAY_API_KEY | Claude Sonnet 5, through Vercel AI Gateway |
For the local model: Qwen3 14B with a 32k context. It takes about 20 to 60 seconds a turn, where Claude takes seconds. Any Ollama model that calls tools works through OLLAMA_MODEL. Create it from a Modelfile:
FROM qwen3:14b
PARAMETER num_ctx 32768
ollama pull qwen3:14b
ollama create qwen3-14b-32k -f Modelfile
Optional, for labelling inquiries: an Anthropic key in strapi/.env as AI_API_KEY (see Inquiry labelling).
npm run dev:strapi and npm run dev:app start the two halves separately.npm run setup againnpm run setup is safe to run again. Each run:
liff/.env gets a new client ID. Restart the app, and reload its page: until then, the concierge answers 502 for a customer session the server has dropped.strapi/.tmp/maison-ops-token. If you connected an agent to the ops tools, give it the new token (see Ops tools for an agent).PORT, STRAPI_URL, DEMO_ADMIN_EMAIL, DEMO_ADMIN_PASSWORD) take priority over strapi/.env, so unset them if that address looks wrong.Stop Strapi. Delete the database and the uploaded images together, keeping .gitkeep:
rm -f strapi/.tmp/data.db
find strapi/public/uploads -type f ! -name .gitkeep -delete
The catalog's images are in strapi/public/uploads/, and Maison's integration tests leave about 57 MB there per run. Delete uploads only together with the database, never by hand while the demo's data is loaded.
Start Strapi, run npm run setup, and restart the app and reload its page.
The Maison plugin's services hold the rules: the catalog, opening hours, who may book what, and who sees a customer's LINE user ID. Three interfaces call them:
| Interface | Used by | Where |
|---|---|---|
| MCP tools | The Maison app, its concierge, and staff agents | /mcp, with a customer's session or an admin token |
| REST API | Websites | /api/maison/… |
| Admin routes | The Maison page and the Homepage widgets in the Strapi admin | /maison/… on Strapi's admin API |
choose_visit, and the chat shows the Book a visit form, filled in with the boutique, day and time the customer named. The tap on Send request books the visit with request_appointment over MCP, the same call as the product page's form, and the concierge says the visit is requested. The model itself never books.More in How Maison works: the REST API with
curlexamples, the MCP tools, and the concierge's rules.
Strapi sends the LINE confirmations itself, so the demo needs no agent for them. Maison also has two ops tools, pending_confirmations and record_confirmation, and the prompt send_pending_confirmations, for an agent that retries the confirmations that weren't sent. npm run setup mints their token, "Maison ops", in strapi/.tmp/maison-ops-token. To connect Claude Desktop, see Ops tools for an agent.
npm test # unit tests, with nothing running
npm run test:e2e # browser and API tests, with Strapi running in local mode
npm run test:live # the concierge against the running Strapi, on the local model
LIVE_MODEL=claude npm run test:live # the visit picker's cases on Claude, with the key in liff/.env
test:e2e and test:live change the demo database. Testing says what each command runs and what it leaves behind.
liff/) deploys to Vercel as a Next.js project. Its settings are the Vercel project's environment variables, listed in Production settings.strapi/) deploys to Strapi Cloud. Never run npm run setup against it: the steps there are done by hand.The production settings for Vercel and Strapi Cloud, the first-time setup on Strapi Cloud and the production notes are in Deploying and running in production.
| Page | What it covers |
|---|---|
| How Maison works | The repository layout, the service layer, customer sessions, the MCP tools, the REST API, the concierge and its visit picker, and inquiry labelling |
| Running with real LINE | Option A: a real LINE message on your phone. Option B: the real app inside LINE |
| Running Maison as a LINE MINI App | The integration slide, what's ready for QBurst, and running the app on a LINE MINI App channel |
| Ops tools for an agent | The ops tools, and how to connect Claude Desktop |
| Testing | Unit, browser, API and live tests, and Maison's own suites |
| Deploying and running in production | The production settings, the first-time setup on Strapi Cloud, and production notes |
| The Maison plugin in this repo | Where the plugin lives, how it shares Strapi's packages, and how to work on it |
| Running the talk demo | The talk's setup, checklist, 3-minute run, rehearsal and backup video |
| The Maison plugin's README | The plugin's full reference: tools, routes, permissions and admin pages |