spongebob
This server is the spongebob MCP backend: it renders, serves, and manages learning websites from JSON payloads, and lets you incrementally update site content through focused tools.
Render sites:
render_sitebuilds a full HTML learning site from a payload (with schema guidance fromget_payload_schema) and returns its slug, URL, pages, and warnings.Manage sites:
list_sites,get_site, anddelete_sitelet you discover, inspect (including the full stored payload), and remove rendered sites.Edit sections:
add_section,update_section,remove_section, andreorder_sectionslet you build and reorganize site pages.Manage flashcards:
add_flashcard_deck,add_flashcards, andremove_flashcard_decklet you add or delete SM-2 spaced-repetition decks.Add resources:
add_resourcesmerges YouTube videos, blog posts, courses, docs, and other learning materials into groups.Adjust the learning path:
add_learning_path_stepandset_learning_pathshape the onboarding roadmap.Update hero/theme:
update_metachanges title, subtitle, repo links, and setup command;set_themechanges accent colors and default dark/light mode.Persist and serve: sites are stored on disk and served over HTTP at
http://127.0.0.1:8787/<slug>/.
Click on "Deploy 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., "@spongebob turn this JSON content into a learning website and give me the URL"
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.
spongebob
Here to help you absorb any repo!
So you can become the patrick-STAR you deserve to be ✫
When a developer or a consumer joins a new project, they usually face the same wall: a repo with no docs, or docs that are stale, or docs so dense they take a week to absorb. They don't know where to start, which technologies to learn first, or why certain design decisions were made. They fall down rabbit holes.
spongebob solves this. Point it at any repository and it produces a ready-to-use learning website — a structured onboarding experience with an overview, prerequisite resources (videos, courses, blog posts), flashcards with spaced repetition, and a knowledge quiz. No manual writing required.
your repo ──▶ Bob analyses the code ──▶ spongebob renders the site ──▶ http://127.0.0.1:8787/<slug>/Problems it directly addresses:
Problem | What spongebob does |
No docs, or AI-generated slop that is hard to understand | Bob compiles real info from code and surfaces stale or outdated content |
Don't know which technology to learn first | Curated learning path with milestones: tech to learn → flashcards → deep dive |
Don't know why a design decision was made | Tech-stack section explains each tool's purpose in this repo, not the vendor tagline |
No idea where to begin running the code | Step-by-step first-task guide built from the actual repo commands |
Learning feels like a chore | Flashcards (spaced repetition) and quiz gamify the experience |
Quickstart — onboard onto any repo in minutes
Prerequisites
1. Install spongebob once
git clone https://github.com/deepakachu5114/spongebob-mcp.git ~/tools/spongebob
cd ~/tools/spongebob
uv sync2. Register it globally in Bob
Run the setup script — it copies the MCP server config, custom mode, and skill into your global Bob config so spongebob is available in every workspace:
bash ~/tools/spongebob/setup-global.shOr do it manually: open Bob's settings, select Edit Global MCP, and add:
"spongebob": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/spongebob", "run", "spongebob", "mcp"]
}Then append the mode and skill:
cat ~/tools/spongebob/.bob/custom_modes.yaml >> ~/.bob/settings/custom_modes.yaml
mkdir -p ~/.bob/skills/start
cp ~/tools/spongebob/.bob/skills/start/SKILL.md ~/.bob/skills/start/SKILL.md3. Onboard onto a repo
Open the target repo in Bob (any repo — not the spongebob folder).
Switch to the spongebob mode using the mode picker.
Type:
onboard this repoBob reads the code and docs, searches for learning resources online, renders the site, and returns a URL like
http://127.0.0.1:8787/my-repo/.
That's it. The learning site stays served as long as spongebob serve is
running (the MCP server starts it automatically on first use).
Related MCP server: @share-html/mcp-server
What the generated site contains
Hero — title, subtitle, repository and website links, setup command.
Learning path — a roadmap for the user to follow.
Overview — business POV (why it exists), analogy-based story to make concepts approachable, tech-stack table, and gotchas.
Prerequisites — YouTube videos (embedded), blog posts, courses and reference docs, grouped and tagged internal vs. external.
First task — step-by-step guide to running real code, with fenced commands taken only from what actually exists in the repo.
How it works — internals explained from the outside in.
Flashcards — SM-2 spaced repetition, keyboard-driven, progress saved in
localStorage.Quiz — multiple choice, multi-select, true/false, with explanations and a remembered best score.
Dark mode, print styles, and deep links to every section.
Want to see it before pointing it at your own repo? Render the built-in example:
uv run spongebob serve &
uv run spongebob render examples/kuya.json --openKeeping the server running
The MCP server starts a background HTTP server the first time a site is rendered. Sites stay reachable as long as the Bob session is open. To keep them reachable after Bob exits, run the server separately:
uv run spongebob serveSites are served at http://127.0.0.1:8787/<slug>/ by default.
CLI reference
Command | What it does |
| Serve rendered sites in the foreground |
| Render a payload from disk and optionally open in browser |
| List rendered sites and their URLs |
| Delete a site |
| Show the data directory and server state |
| Run the MCP server over stdio (what Bob launches) |
Hosting with a container
# Build
podman build -t spongebob -f Containerfile .
# Run as a web server (sites on port 8787, stored in a named volume)
podman run --rm -p 8787:8787 -v spongebob-sites:/data spongebob
# Run as an MCP server (containerised)
podman run --rm -i -v spongebob-sites:/data spongebob spongebob mcpRegister the containerised MCP server in .bob/mcp.json or ~/.bob/mcp.json:
"spongebob": {
"command": "podman",
"args": ["run", "--rm", "-i", "-v", "spongebob-sites:/data", "spongebob", "spongebob", "mcp"]
}If the host port mapping is not 1:1 (e.g. 9000:8787), set:
-e SPONGEBOB_PUBLIC_URL=http://localhost:9000Environment variables
Variable | Default | Purpose |
|
| Where sites are stored |
|
| Static server port (falls forward to next free port) |
|
| Interface to bind |
| (derived) | Override when behind a port mapping or proxy |
| (off) | Set to any value to enable HTTP access logs |
Architecture
flowchart LR
A[Your repo] -->|Bob reads code\n& docs| B(start skill)
B -->|searches for\nlearning resources| C((Web))
B -->|builds JSON\npayload| D[spongebob\nMCP server]
D -->|renders HTML| E[(sites on disk)]
E -->|served at\nlocalhost:8787| F[Learning site\nin your browser]Two moving parts:
The
startskill — instructs Bob to read the repo, gather resources online, and assemble the JSON payload. Bob does the thinking.The MCP server (
spongebob mcp) — receives the payload, renders the HTML, starts the static server, and hands back the URL. spongebob does the design.
The agent writes content; spongebob owns the design. Bob never writes HTML.
Sites are persisted at ~/.local/share/spongebob/sites/<slug>/ and survive restarts and reinstalls.
MCP tools
Discovery and one-shot rendering:
get_payload_schema(include_example=True)— the JSON Schema plus a worked example. Call this first.render_site(payload, overwrite=True)— returns{slug, url, pages, warnings}.list_sites(),get_site(slug, include_payload=False),delete_site(slug).
Incremental mutation (patch the stored payload, re-render in place, same URL):
add_flashcard_deck,add_flashcards,remove_flashcard_deckadd_resourcesadd_section,update_section,remove_section,reorder_sectionsadd_learning_path_step,set_learning_pathupdate_meta,set_theme
Tests
uv run python scripts/smoke_mcp.pyDrives the real stdio MCP protocol: lists tools, renders examples/kuya.json,
patches it, fetches pages over HTTP, and asserts that error paths return useful
guidance.
Notes
Tailwind comes from a CDN. Sites need network access to look their best. The vendored
spongebob.csscarries layout-critical pieces so pages stay legible offline.Flashcard progress lives in
localStorage— per-browser, per-origin. Changing the port loses it.The server binds loopback by default. Setting
SPONGEBOB_HOST=0.0.0.0exposes every rendered site to your network with no authentication.
Attribution
Flashcard, quiz and spaced-repetition concepts modelled on
StudyCraft (Apache-2.0). No
StudyCraft source code is included — see NOTICE.
Available Tools
17 toolsadd_flashcard_deckB
Add a new flashcard deck to a site.
Creates a flashcards section if the site does not have one yet. Cards are reviewed with an SM-2 spaced-repetition schedule in the browser.
Inputs: deck (required), slug (required), section_id. Returns: object
add_flashcardsA
Append cards to an existing deck. Markdown works in front and back.
Inputs: slug (required), cards (required), deck_id (required). Returns: object
add_learning_path_stepB
Add a numbered step to the learning path on the landing page.
target may be a section id, a page filename, an anchor or a full URL.
Inputs: slug (required), step (required), position. Returns: object
add_resourcesA
Add prerequisite resources — YouTube videos, blog posts, courses, docs.
Items are merged into the group whose label matches group_label, or a new group is created. YouTube URLs become embedded players. Mark internal wiki links with source="internal" so they are visually distinguished.
Inputs: slug (required), items (required), kind, section_id, +1 more. Returns: object
add_sectionA
Add a section to a site, creating its own page.
An unknown type is rendered as a generic custom section built from its
blocks, so you can add kinds of content the schema does not name yet.
Inputs: slug (required), section (required), position. Returns: object
delete_siteA
Delete a rendered site and everything under it.
Inputs: slug (required). Returns: object
get_payload_schemaA
Return the JSON Schema for a site payload, plus a worked example.
Call this before render_site the first time. The schema is permissive:
unknown keys are preserved and shown on the page, and an unknown section
type degrades to a generic custom section rather than failing.
Inputs: include_example. Returns: object
get_siteA
Inspect a rendered site: its sections, decks and learning path.
Set include_payload to get the full stored JSON back — useful when you want to reason about existing content before patching it.
Inputs: slug (required), include_payload. Returns: object
list_sitesA
List every site rendered on this machine, with its URL.
Inputs: no named parameters. Returns: object
remove_flashcard_deckB
Delete a flashcard deck from a site.
Inputs: slug (required), deck_id (required). Returns: object
remove_sectionB
Remove a section and delete its page.
Inputs: slug (required), section_id (required). Returns: object
render_siteA
Render a full site and return its URL.
Use this once per site. To change a site afterwards, prefer the add_* and update_* tools — they patch the stored payload in place, so you do not have to resend content that has not changed.
Inputs: payload (required), overwrite. Returns: object
reorder_sectionsA
Reorder sections. Ids you leave out keep their relative order at the end.
Inputs: slug (required), section_ids (required). Returns: object
set_learning_pathB
Replace the whole learning path.
Inputs: slug (required), steps (required). Returns: object
set_themeA
Change the site's accent colours and default light/dark mode.
Inputs: slug (required), theme (required). Returns: object
update_metaC
Update the hero: title, subtitle, summary, repo links, setup command.
Inputs: slug (required), patch_fields (required). Returns: object
update_sectionA
Shallow-merge fields into an existing section.
Whole list fields are replaced, not appended — to add to a list, prefer add_flashcards or add_resources.
Inputs: slug (required), section_id (required), patch_fields (required). Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 17 tools
Most tools cleanly map to a distinct resource and action, but add_flashcards vs add_flashcard_deck are easy to confuse from their names, and add_resources vs add_section both add content to a site. The descriptions mostly resolve the ambiguity, so an agent can usually pick correctly.
The toolset mostly follows a verb_noun snake_case pattern like list_sites, render_site, delete_site, and update_section. Minor inconsistencies exist such as add_flashcards using a plural object and set_learning_path/update_meta/set_theme using different update verbs, but the overall pattern is predictable.
At 17 tools, the server is at the heavy end of the ideal range. The count is understandable given the multiple content types, but some tools overlap in scope and the surface feels slightly larger than necessary.
Sites, sections, flashcard decks, learning paths, meta, and theme are all covered with reasonable create/read/update/delete workflows. Gaps are minor: there is no card-level update/remove or dedicated resource removal, though update_section and set_learning_path provide workarounds.
Maintenance
Related MCP Connectors
Create, update, and publish real hosted websites from your agent via the Aveiro API.
Deploy HTML from any agent: POST markup, get a live URL. Static hosting API with MCP tools.
Publish HTML pages and live dashboards from your agent to a link that stays up to date.
Turn finished agent work into a shareable, updatable web page that opens in WeChat. OAuth required.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables agents to publish HTML artifacts to permanent, shareable, versioned pages on Artifyde via MCP.67 npmMIT
- AlicenseAqualityBmaintenanceEnables publishing sanitized static HTML pages from an MCP agent and receiving shareable URLs, with tools for updating, listing, publishing, and deleting pages.1224 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables users to upload, share, preview, and publish a generated HTML page from an agent, returning a stable link and version link after browser-authorized access.15 npmMIT No Attribution
- AlicenseNot gradedqualityBmaintenanceEnables publishing self-contained HTML files or directories to get short, readable links, with an MCP tool for agents to create and manage previews.1 npm1MIT