mcp-apps-lab
Fetches live RSS feeds from The Guardian Business and compiles them into a markdown news briefing.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-apps-labgive me a quiz about Python"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-apps-lab
One FastMCP app server (Python) โ a single MCP server that hosts four interactive Prefab apps (quiz, weather, news, English Duo) plus MCP resources and prompts. Each app tool returns a Prefab UI (buttons, cards, tabs, progress) instead of raw JSON; any MCP host renders them, and the LLM sees a text summary.
Apps
App | UI tool | Backend tool | What it demonstrates |
Quiz |
|
| Multi-turn state: the LLM generates questions, the user answers via buttons, each click grades through a backend tool, the final score is sent back to the conversation |
Weather |
|
| Live forecast from the Open-Meteo API: free-text location input geocodes ANY city name (no fixed table โ โbekasiโ works), shows current conditions with the city's local time (๐ 20:31 WIB), region/country, and a 5-day forecast; unknown names fall back to Jakarta, sample data offline (LIVE/SAMPEL badge); lookups go through the host's tools/call proxy (hashed tool names โ the proxy never sees the mapping) |
News Curator |
|
| Live RSS feeds (Bloomberg Markets, CNBC, The Guardian Business, BBC Business) fetched through the backend tool on tab click / refresh โ parsed with the stdlib, sample-data fallback when offline (LIVE/SAMPLE badge); compiles a markdown briefing and sends it back to the conversation |
English Duo |
|
| A Duolingo-style English learning app: CEFR-graded vocabulary (A1-B2), FSRS-6 spaced-repetition cards per word, and game mechanics โ XP + combo bonus, 5 hearts (mistakes cost one, daily refill), daily streak ๐ฅ, and a BronzeโDiamond level ladder. Due reviews + new words drive each lesson; answers are graded by the backend tool which reschedules the word's card and updates the profile in SQLite. |
Also exposed server-side: live resources (news://{source}/feed,
news://{source}/briefing, weather://{city}/current, duo://profile,
duo://due, duo://words/{level}, duo://guide/{level}, duo://levels)
and prompts (morning-briefing, daily-english).
Related MCP server: MCP + CrewAI Agentic Integration
Layout
src/mcp_apps_lab/
โโโ server.py # the ONE FastMCP server โ wires apps, tools, resources, prompts
โโโ apps/ # the FastMCPApp UIs (LLM-facing entry points)
โ โโโ quiz.py # take_quiz UI
โ โโโ weather.py # weather_app UI
โ โโโ news.py # news_curator UI
โ โโโ duo.py # duo_english UI (English Duo)
โโโ tools/ # backend tool functions the UIs call via the tool proxy
โ โโโ quiz.py # submit_answer
โ โโโ weather.py # get_weather
โ โโโ news.py # get_feed (live RSS fetch + offline fallback)
โ โโโ duo.py # grade_answer, get_profile, add_word
โโโ duo/ # the English Duo engine
โ โโโ store.py # SQLite persistence (~/.mcp-apps-lab/duo.db)
โ โโโ scheduler.py # FSRS-6 spaced-repetition wrapper
โ โโโ game.py # XP/combo, hearts, streak, level ladder
โ โโโ engine.py # lesson building + grading orchestration
โโโ resources/ # MCP resources (news://, weather://, duo://profile, duo://due)
โโโ prompts/ # MCP prompt templates (morning-briefing, daily-english)
โโโ data/ # feed definitions, offline fallback data, word bankSetup
uv sync # installs the package (editable) + fastmcp[apps] + dev toolsConfiguring which tools are enabled
config.json at the repo root decides which UI apps (tools) the server
advertises to the LLM. Disabled apps are not registered at all โ their
backend tools stay hidden too.
{
"tools": {
"take_quiz": false,
"weather_app": false,
"news_curator": true,
"duo_english": true
}
}Keys:
take_quiz,weather_app,news_curator,duo_english.Missing keys default to enabled; unknown keys are ignored.
Lookup order:
MCP_APPS_LAB_CONFIGenv var โ./config.jsonโ~/.mcp-apps-lab/config.json.The checked-in config currently runs with quiz and weather disabled (English Duo + News Curator active); flip the booleans to re-enable.
Running
Plain streamable-HTTP server
uv run python -m mcp_apps_lab # streamable HTTP at http://127.0.0.1:8090/mcp
# (MCP_APPS_LAB_PORT to override)Browser dev UI (fastmcp dev apps)
uv run fastmcp dev apps src/mcp_apps_lab/server.py --mcp-port 8090MCP server:
http://127.0.0.1:8090/mcp(auto-reload on save)Dev UI:
http://localhost:8080โ picktake_quiz,weather_app,news_curator, orduo_english, fill in arguments, and play the rendered app in a new tabThe left inspector panel shows the JSON-RPC traffic (including the hashed backend-tool calls the UIs make)
English Duo details
State lives in a SQLite database (~/.mcp-apps-lab/duo.db, override with
DUO_DB_PATH):
AI-generated content โ the coach generates fresh, CEFR-appropriate vocabulary itself (personalized to the user's level/interests) and passes it via the
wordsargument ofduo_english/duo_flashcards; sessions built this way show an โจ AI-GENERATED badge. Every generated word is saved to the bank with its own FSRS card, so it comes back in later review sessions. The built-in 120-word bank remains the fallback (and the source for due-review-only sessions).Duolingo brand UI โ Nunito typeface, Duolingo palette (green
#58CC02, blue#1CB0F6, yellow#FFC800, red#FF4B4B), rounded cards, 3D-press buttons, and green/red feedback banners โ distinct from the generic quiz UI.Spaced repetition โ one FSRS-6 card per word (
fsrspackage, the algorithm modern Anki uses). Correct โ Good, wrong โ Again; due reviews are served first in every lesson, new words fill the rest. An explicit level (e.g.duo_flashcards(level="b1")) is honored strictly: only that level's due reviews and new words are served, never other levels. The masthead shows the active level.Game mechanics โ 10 XP per correct answer + combo bonus (capped), โค๏ธ 5 hearts (a mistake costs one; refill daily), ๐ฅ streak (once per day per completed lesson), levels 1-10 with BronzeโDiamond leagues.
Exercise types โ five, cycling through each lesson so it never feels like one quiz:
mcโ โWhat does X mean?โ multiple choicefillโ pick the word that fits a sentence blanktypeโ TYPE the missing word (no choices at all)orderโ build the sentence by tapping scrambled word tiles (with a clear/undo button)flipโ flashcard: flip the card, then self-rate Again / Hard / Good / Easy โ mapped straight onto the FSRS ratings, so reviews get a real difficulty signal and XP (0/8/10/12) instead of just right/wrongFor a pure flashcards session (no quiz questions), the
duo_flashcardsUI serves flip cards only โ flip to reveal the definition, self-rate, and the FSRS schedule updates per card
Resources/prompts โ
duo://profileandduo://duegive the assistant live stats. The AI-generation reference resources:duo://guide/{level}(the per-level generation prompt โ learner profile, word scope, definition/example rules, output format),duo://words/{level}(existing words at a level, to match style and avoid duplicates), andduo://levels(overview + word counts). Thedaily-englishprompt wires everything into a daily routine.
Wiring into the ai-backend-lab agent
One server, one entry โ the agent sees all three UI tools plus the resources and prompt:
{
"mcp-apps-lab": {
"url": "http://127.0.0.1:8090/mcp",
"transport": "streamable_http"
}
}Then ask the agent something like "give me a quiz about Python", "show me the weather in Tokyo", "curate today's financial news", or "let's do my daily English practice" โ it calls the UI tool, and the agent's reply streams a structured tool event the frontend renders as the interactive app.
How it's structured
# server.py โ one server, apps filtered by config.json, plus resources & prompts
mcp = build_server() # providers = apps enabled in config.json
register_resources(mcp) # news://{source}/feed, weather://{city}/current, duo://profile, ...
register_prompts(mcp) # morning-briefing, daily-english
# apps/weather.py โ the UI app owns its backend tool
app = FastMCPApp("Weather")
app.add_tool(get_weather) # from mcp_apps_lab.tools โ hashed to this app
@app.ui() # LLM-facing entry point โ returns a PrefabApp
def weather_app(city: str) -> PrefabApp: ...@app.ui()tools are the only ones advertised to the LLM; their result is a Prefab UI the host renders (the model sees a text summary).Backend tools (
tools/) are plain functions registered withapp.add_tool(...): the renderer calls them over the MCP server under a hashed name (<sha256(app+tool)>_<tool>), so the UI can grade, look up, or compile without the LLM being in the loop โ and the tool proxy never sees the mapping.providers=[...]lets one server host several apps; resources and prompts are registered server-side and shared.
Adding to the lab
App: create
apps/<name>.py(aFastMCPAppwith an@app.ui()entry point), register its backend tool(s) fromtools/, and add the app toproviders=[...]inserver.py.Backend tool: add a plain function to
tools/<name>.py; register it withapp.add_tool(...)in the owning app.Resource / prompt: add a
register(mcp)function inresources/<name>.py/prompts/<name>.pyand call it from the correspondingregister_*inserver.py.Keep it lint-clean and tested:
uv run ruff check .anduv run pytest(smoke tests live intests/test_server.py).
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.
MCP server for querying Forkast documentation
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceFastMCP is a comprehensive MCP server allowing secure and standardized data and functionality exposure to LLM applications, offering resources, tools, and prompt management for efficient LLM interactions.3MIT
- FlicenseBqualityDmaintenanceA FastMCP server providing real-time weather, news retrieval, and local note management tools for autonomous CrewAI agents. It enables context-aware multi-agent workflows with observability and high-speed inference integration.4
- FlicenseAqualityDmaintenanceA FastMCP server with web search, local notes CRUD, and a generative UI dashboard using Prefab.3
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hazurafif/mcp-apps-lab'
If you have feedback or need assistance with the MCP directory API, please join our Discord server