Contemplative reasoning MCP server — Lotus Sutra wisdom framework with interactive ext-apps journey visualization.
SaferSkills independently audited Lotus Wisdom Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<p align="center"> <img src="assets/lotus-flower.png" alt="Lotus Flower" width="400"/> </p>
An MCP server implementation that provides a tool for problem-solving using the Lotus Sutra's wisdom framework, combining analytical thinking with intuitive wisdom.
Available at: https://lotus-wisdom-mcp.linxule.workers.dev/mcp
contemplate, deep-inquiry) for one-step guided contemplative sessionsstructuredContent + outputSchema) alongside the text responsenpx) or a hosted remote ConnectorThis MCP server was developed from the Lotus OS prompt, which was designed to implement a cognitive framework based on the Lotus Sutra. The MCP server format makes this framework more accessible and easier to use with Claude and other AI assistants.
The MCP server exposes the framework through tools and prompts. How well a model follows that framework depends on the model and host.
The server implements a structured thinking process using wisdom domains inspired by the Lotus Sutra:
The server organizes thoughts using wisdom domains (all valid values for the tag input parameter):
beginupaya, expedient, direct, gradual, suddenrecognize, transform, integrate, transcend, embodyexamine, reflect, verify, refine, completeopen, engage, expressmeditateIn clients that support MCP ext-apps, each step renders inline as an interactive halo (see Interactive Visualization below). For every client, each step also returns:
structuredContent + outputSchema) for programmatic consumersNote: The local stdio server can emit per-step trace lines to its console (stderr) when run with LOTUS_DEBUG=true, helping developers follow the thinking process.
tag='begin' to receive the full frameworkA tool for problem-solving using the Lotus Sutra's wisdom framework, with various approaches to understanding.
Begin your journey with `tag='begin'` - this returns the full framework (philosophy, domains, guidance) to ground your contemplation. Then continue with the other tags.
Inputs:
tag (string, required): The current processing technique (must be one of the tags listed above)content (non-empty string, required): The content of the current processing step, including beginstepNumber (integer, optional, default 1): Current number in sequencetotalSteps (integer, optional, default 5): Estimated total steps needednextStepNeeded (boolean, optional, default true): Whether another step is neededisMeditation (boolean, optional): Whether this step is a meditative pausemeditationDuration (integer, optional): Duration for meditation in seconds (1-10)previousJourney (string, optional): The journey string from a previous response, e.g. "begin → open → examine". Lets the AI carry journey continuity forward in stateless clients (such as the remote Worker), where the server keeps no session state.Returns: a JSON text block and structuredContent validated against the tool's outputSchema. Every successful response includes journey for continuity, including begin and completion. Completion also retains finalJourney for compatibility. For begin, the full framework is in the text block; structured output contains its status, welcome, contemplation, journey, domain journey, and step counts. Other result variants retain their fields in both representations.
A meditation step with nextStepNeeded: false completes the inquiry with WISDOM_READY; ongoing meditation steps return MEDITATION_COMPLETE.
Response statuses include:
FRAMEWORK_RECEIVED status on a begin stepMEDITATION_COMPLETE status for meditation stepsWISDOM_READY status when the contemplative process is completeThe tool declares readOnlyHint, idempotentHint, destructiveHint: false, and openWorldHint: false. These are host hints, not a guarantee of zero side effects: local stdio calls update the in-memory journey, and the hosted worker records usage analytics. The tools do not modify user files or external business data.
Get a summary of the current contemplative journey.
Inputs:
previousJourney (string, optional): The journey string from a previous response, used to reconstruct the summary in stateless clients.Returns:
The server registers two prompts that scaffold a guided contemplative session (surfaced as slash commands or prompt pickers in clients that support MCP Prompts):
question: opens a single-question contemplation, instructing the model to start with tag='begin', iterate, and speak the wisdom only once status='WISDOM_READY'.topic: begins a longer inquiry that moves deliberately across the wisdom domains (process → meta-cognitive → non-dual → meditation).The Lotus Wisdom tool is designed for:
Here's how a conversation with Claude might flow when using the Lotus Wisdom MCP server:
User: "Help me understand the relationship between freedom and responsibility."
Claude would begin the journey with tag='begin' to receive the framework, then continue:
{
"tag": "begin",
"content": "Entering contemplation on freedom and responsibility.",
"stepNumber": 1,
"totalSteps": 6,
"nextStepNeeded": true
}→ Returns FRAMEWORK_RECEIVED with full framework
{
"tag": "open",
"content": "The question explores the relationship between freedom and responsibility, which contain an apparent tension but also deep connection.",
"stepNumber": 2,
"totalSteps": 6,
"nextStepNeeded": true
}{
"tag": "direct",
"content": "Freedom and responsibility are two sides of the same coin. True freedom isn't absence of constraints but the capacity to choose our response within constraints.",
"stepNumber": 3,
"totalSteps": 6,
"nextStepNeeded": true
}{
"tag": "meditate",
"content": "Contemplating how freedom without responsibility becomes chaos, and responsibility without freedom becomes oppression.",
"stepNumber": 4,
"totalSteps": 6,
"nextStepNeeded": true,
"isMeditation": true
}{
"tag": "integrate",
"content": "Freedom and responsibility mutually enable each other. Our freedom to choose gives rise to our responsibility for what we choose, and our willingness to take responsibility expands our freedom.",
"stepNumber": 5,
"totalSteps": 6,
"nextStepNeeded": true
}{
"tag": "express",
"content": "The paradox resolves when we see that authentic freedom includes responsibility as its natural expression.",
"stepNumber": 6,
"totalSteps": 6,
"nextStepNeeded": false
}When the tool returns status: 'WISDOM_READY', Claude then speaks the final wisdom naturally, integrating all the insights from the contemplative journey.
Install via Smithery for one-click setup, or follow the manual instructions below.
Requires Node.js 18+. The server runs locally via npx.
# Claude Code
claude mcp add lotus-wisdom -- npx -y lotus-wisdom-mcp
# Codex CLI (OpenAI)
codex mcp add lotus-wisdom -- npx -y lotus-wisdom-mcp
# Gemini CLI (Google)
gemini mcp add lotus-wisdom npx -y lotus-wisdom-mcpAdd to your claude_desktop_config.json:
| OS | Config path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
{
"mcpServers": {
"lotus-wisdom": {
"command": "npx",
"args": ["-y", "lotus-wisdom-mcp"]
}
}
}Add to .vscode/mcp.json (workspace) or open Command Palette > MCP: Open User Configuration (global):
{
"servers": {
"lotus-wisdom": {
"command": "npx",
"args": ["-y", "lotus-wisdom-mcp"]
}
}
}Note: VS Code uses"servers"as the top-level key, not"mcpServers". Other VS Code forks (Trae, Void, PearAI, etc.) typically use this same format.
Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):
{
"mcpServers": {
"lotus-wisdom": {
"command": "npx",
"args": ["-y", "lotus-wisdom-mcp"]
}
}
}Add to ~/.codeium/windsurf/mcp_config.json (Windows: %USERPROFILE%\.codeium\windsurf\mcp_config.json):
{
"mcpServers": {
"lotus-wisdom": {
"command": "npx",
"args": ["-y", "lotus-wisdom-mcp"]
}
}
}Open MCP Servers icon in Cline panel > Configure > Advanced MCP Settings, then add:
{
"mcpServers": {
"lotus-wisdom": {
"command": "npx",
"args": ["-y", "lotus-wisdom-mcp"]
}
}
}In Settings > MCP Servers > Add Server, set Type to STDIO, Command to npx, Args to -y lotus-wisdom-mcp. Or paste in JSON/Code mode:
{
"lotus-wisdom": {
"name": "Lotus Wisdom",
"command": "npx",
"args": ["-y", "lotus-wisdom-mcp"],
"isActive": true
}
}In Settings > MCP Servers, add a new server with Type: stdio, Command: npx, Args: -y lotus-wisdom-mcp.
Alternatively, edit ~/.codex/config.toml directly:
[mcp_servers.lotus-wisdom]
command = "npx"
args = ["-y", "lotus-wisdom-mcp"]Alternatively, edit ~/.gemini/settings.json directly:
{
"mcpServers": {
"lotus-wisdom": {
"command": "npx",
"args": ["-y", "lotus-wisdom-mcp"]
}
}
}On Windows, npx requires a shell wrapper. Replace "command": "npx" with:
{
"command": "cmd",
"args": ["/c", "npx", "-y", "lotus-wisdom-mcp"]
}For CLI tools on Windows:
claude mcp add lotus-wisdom -- cmd /c npx -y lotus-wisdom-mcp
codex mcp add lotus-wisdom -- cmd /c npx -y lotus-wisdom-mcpChatGPT only supports remote MCP servers over HTTPS. Use Smithery or connect directly to the hosted instance below via ChatGPT Settings > Connectors.
A public instance is available at https://lotus-wisdom-mcp.linxule.workers.dev/mcp. No API key needed.
For clients supporting Streamable HTTP, connect directly to the URL. For stdio-only clients, use mcp-remote:
{
"mcpServers": {
"lotus-wisdom": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://lotus-wisdom-mcp.linxule.workers.dev/mcp"]
}
}
}To self-host your own instance, see worker/README.md.
Use Bun 1.4.2 and Node.js 24 to match CI.
bun install --frozen-lockfile
bun run typecheck
bun run test
bun run build
bun run test:package
bun run startThe build installs the app's locked dependencies and rebuilds the tracked dist/bundle.js and dist/journey.html artifacts. Check the app with cd app && bunx tsc --noEmit && bun run test. The suite covers the single-file build (the local Vite plugin inlines JavaScript and CSS into one HTML resource; tests cover dynamic imports and HTML escaping) and the journey itself: continuity across frames, meditation, reset between inquiries, exploration of the completed panel only, and every tag's character rendering from embedded outlines. See worker validation for the worker typecheck, dry-run build, and local HTTP regression.
To see a journey the way a chat shows it, one frame per call, run cd app && bunx vite build and open app/preview.html. The halo's characters are generated into app/src/glyphs.ts; app/scripts/glyphs.py regenerates them from a Noto Serif TC subset and documents how to fetch it.
bun run test:package packs the built files, installs the tarball in a temporary consumer directory, and starts npm's executable link. It checks the MCP version, tool discovery, a complete inquiry ending in meditation, a fresh inquiry reset, and the packaged journey HTML. CI runs this check after building and before publishing, so a broken launcher or missing package asset blocks the release. It requires npm registry access to install production dependencies and removes its temporary files on completion.
Dependabot uses the bun ecosystem for the root, app, and worker packages so updates include their bun.lock files. CI verifies all three packages on pull requests. Merging a PR updates source only: a version tag publishes to npm and the MCP Registry, and the Cloudflare Worker requires a separate deployment.
If npm publishes successfully but MCP Registry registration fails, retry only registration for the existing tag:
gh workflow run publish-mcp.yml --ref main -f registry_tag=vX.Y.ZReplace vX.Y.Z with the existing published version's tag. This revalidates the tagged source and waits for npm availability before registration. It does not republish npm or move the release tag.
Enable debug mode:
LOTUS_DEBUG=true bun run startIn MCP clients that support ext-apps (Claude Desktop, Cursor, ChatGPT), each step renders inline as a small panel: a ring of pixels modeled on the LED halos (光背) wired behind temple statues, the step's character at its center, and the contemplation beside it. Each tool call gets its own panel, so a journey reads down the conversation one frame at a time.
totalSteps changes and closes exactly when the journey completes.prefers-reduced-motion every state appears without animation. The design came out of a Lotus Wisdom journey on its own UI; after cd app && bunx vite build, open app/preview.html to replay that journey as a chat shows it, one frame per call.Clients without ext-apps support are unaffected — they receive the same JSON tool responses as before.
The Lotus Wisdom framework recognizes that wisdom often emerges not through linear thinking but through a dance between different modes of understanding. The tool facilitates this by:
integrate, transcend, and embody help weave insights together rather than keeping them separate.MCP tool descriptions stay in the AI's context window constantly when the server is connected. To minimize this overhead while preserving the full teaching content:
lotuswisdom tool description is kept minimal—just enough for the AI to know when and how to use ittag='begin', including:begin tag ensures models receive complete understanding before contemplatingThis approach reduces constant context overhead by ~85% when the tool is idle. When actually used, the full framework is delivered on first step—nothing is lost.
This MCP server is licensed under the MIT License. For more details, please see the LICENSE file in the project repository.
Contributions are welcome! Please feel free to submit issues or pull requests on the GitHub repository.
Current version: 0.9.1
the grouped Dependabot updates.
@hono/node-server and qs dependencies to patchedversions, clearing the dependency audit findings in the server and worker.
dependencies with Cloudflare Agents' required peer versions.
patched version directly.
a traditional character at its center, and the contemplation beside it. Earlier steps appear in ink, future steps as a dim track, and the current step in its domain color. The completed circle turns white in the night theme.
hover, so the characters render without installed CJK fonts or font requests.
explorable by hover, focus, pin, and keyboard navigation.
scrolling for longer earlier text, and fixed a rapid-hover content fade race.
DOM regressions, and a development preview showing one frame per tool call.
was prepared but not published separately.
metadata from begin, including in structured output.
journey to completionresponses while retaining finalJourney.
pending animations, collapsed steps, pins, and completion effects.
plus DOM tests for consecutive inquiries and animation races.
temporarily overrides Undici until Wrangler's Miniflare dependency is patched.
app and worker validation to CI.
dependency audits to CI. All three Bun audits passed during release validation on September 14, 2026.
dependencies. The server transports remain on MCP SDK v1; the worker uses the agents SDK's explicit compatibility handler and retains stateless JSON responses.
src/shared/ and are imported by both the stdio entry (index.ts) and the Cloudflare Worker — no more local-vs-remote driftServer API to McpServer, matching the Workercontemplate and deep-inquiry for guided contemplative sessionsstructuredContent validated against an outputSchema, plus behavioral annotations (readOnlyHint, idempotentHint, destructiveHint: false, openWorldHint: false) and a server instructions field@modelcontextprotocol/sdk bumped to ^1.27.1, zod added, chalk removed; the legacy Express SSE server (server.ts), the express deps, and the Dockerfile were removed; the repo moved to bun lockfiles. Added a vitest test suite (tests/) and a single-source version workflow (src/shared/version.ts + bun run sync-version)server.json advertises the remote Worker (remotes[]), a websiteUrl, and icon sizes; the Worker advertises icons/website in the initialize handshake and serves the icon as same-origin bytes at /icon.pngpreviousJourney parameter for journey continuity (eliminating accumulated SSE wall time)server.json and the Worker so MCP Registry and claude.ai Connectors display the lotus logonextStepNeeded=false now correctly returns WISDOM_READY (previously only express and complete could complete)tag='begin' can now be called with just {"tag":"begin"} - all other params auto-filledbegin tag now returns full parameter explanations, response format details, and meditation handlingtag='begin' opens the journey—returns full framework before contemplation startsbegin tag ensures models receive complete understanding before contemplatingtitle field for better discoverability~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.