wisdomforge-mcp
OfficialClick 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., "@wisdomforge-mcprecommend books for my 8-year-old who loves art and learns visually"
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.
wisdomforge-mcp
Read-only Model Context Protocol server for the SMF WisdomForge curriculum. It exposes lessons, books, age-leveled booklets, chapter audio, demo transcripts, and the public search index to Cursor and Grok Bot.
The server stores no learner data. Age and learning style are used only to score the request in front of it. Media tools return public URLs and do not proxy file bytes.
This package is not deployed yet. The remote URL below is a placeholder until a Vercel project exists.
Content sources
The live search index (public/search-index.json in smfworks/wisdomforge, 1,332 documents, built 2026-09-21) is produced by scripts/build-search-index.mjs. That script reads markdown from ~/Documents/WisdomForge/wisdomforge/content on an authoring machine. Those 1,332 markdown files are not in the public site repository and are not served by smfwisdomforge.com.
Full text in this server comes from three places:
Curriculum TypeScript in the site repo (
src/lib/curriculum): lesson objects (reading, objectives, activities, Hermes prompts), book records (summary and chapter outline), and demo transcripts. Ingest imports them.WF_SRCdefaults to../wisdomforge-src.Public PDFs in
public/downloads. Ingest runspdftotextand stores an excerpt plus per-chapter text on each book and booklet. A missing local PDF can be fetched fromhttps://smfwisdomforge.com/downloads/<name>. If extraction returns almost no text, ingest falls back to the sibling.mdpublished next to that PDF. Those markdown files are the public manuscripts, not the private 1,332-document corpus.Search-index rows become
index_docitems. They are searchable through the ported BM25 index (tokenizer and ranking copied fromsrc/app/api/search/route.ts) and link to the related booklet PDF when that figure has one. They do not contain the unpublished markdown body.
Media URLs are https://smfwisdomforge.com plus the path under public/. This checkout does not include public/audio (sparse clone). Ingest reads paths and byte sizes with git ls-tree -r --long HEAD public/audio and builds the MP3 URLs from that listing.
data/catalog.json and data/search-index.json are committed. A running server does not need the source clone.
Booklet filename levels follow booklets.ts BAND_TO_LEVEL, checked against age ranges in bands.ts:
Booklet level | Age band | Ages |
elementary | little | 5–10 |
middle | young | 11–14 |
high | emerging | 15–18 |
adult | adult | Adult |
Books whose titles name an age use that band. Other books (parent manuals, full readers, and operator books) are tagged adult. Age-leveled booklets carry the child bands.
get_catalog_info reports content_version: the wisdomforge git SHA plus the search-index built time.
Related MCP server: CogniLedger Makuri MCP Server
Tools
Every tool is read-only (readOnlyHint: true), returns text content and structuredContent, and includes content_version. Resource template: wisdomforge://item/{id} (same payload as get_item with include=full).
Tool | Arguments | Returns |
|
| Ranked hits with snippet, url, item_id |
|
| Metadata, body or outline, media, Hermes prompt |
| — | 4 bands, age ranges, level mapping |
|
| 10 subjects with counts |
|
| Paged items and |
|
| Books and lesson tracks, ordered item ids |
|
| Ordered chapters or sittings with item ids |
|
| Public URLs, MIME type, size when known |
|
| Objectives, Hermes pairing line and prompt, discussion questions, printables |
|
| Deterministic ranking and a rationale. No model call |
| — | Counts, content version, license note |
recommend_for_learner keeps results inside the age band: through 10 little, 11–14 young, 15–18 emerging, 19 and over adult. Auditory learners are boosted toward MP3s, reading learners toward books and PDFs, visual learners toward images and art, kinesthetic learners toward lessons with a Try This.
Cursor
Stdio, after this package is published:
{
"mcpServers": {
"wisdomforge": {
"command": "npx",
"args": ["-y", "wisdomforge-mcp"]
}
}
}Stdio from a local checkout (build first):
{
"mcpServers": {
"wisdomforge": {
"command": "node",
"args": ["/absolute/path/to/wisdomforge-mcp/dist/stdio.js"]
}
}
}Remote URL, once deployed (placeholder until then):
{
"mcpServers": {
"wisdomforge": {
"url": "https://wisdomforge-mcp.vercel.app/mcp"
}
}
}Put that object in .cursor/mcp.json in the project, or in Cursor’s user MCP config.
Grok Bot
Add the remote MCP URL as a plugin connection. The marketplace listing targets Grok Bot and Cursor. The endpoint is stateless Streamable HTTP at /mcp (rewritten to /api/mcp). No API key is required, and this server does not call a model.
Placeholder until deploy: https://wisdomforge-mcp.vercel.app/mcp
Local development
Requires Node.js 20 or newer.
npm install
npm run dev:httpdev:http listens on http://127.0.0.1:3000/mcp. Override with PORT and HOST.
npm run typecheck
npm test
npm run build
npm run smoke
npm run check:termssmoke builds nothing by itself. Run npm run build first. It spawns dist/stdio.js, expects 11 tools, calls every tool, then does the same check against the HTTP handler.
The stdio bin is wisdomforge-mcp (node dist/stdio.js).
Vercel
Not deployed yet. When you are ready:
Push the repo to GitHub under the
smfworksorg (this workspace does not push).Import the project in Vercel. Framework preset: Other. Install command:
npm ci. Build command can be empty; the function isapi/mcp.tsand readsdata/at runtime.Do not add a model API key. None is used.
vercel.jsonrewrites/mcpto/api/mcpand includesdata/**in the function bundle.Deploy. The public URL will look like
https://<project>.vercel.app/mcp. Replace the placeholder in this README and in the marketplace form.Confirm
POST /mcpwith an MCPinitializereturns a result, and thatGETandDELETErespond (stateless servers answer those with 405).
The handler creates a new server and transport for every request. Nothing about the learner is written to disk or to a session.
Refresh the catalog
From a machine that has the wisdomforge checkout and pdftotext (poppler):
WF_SRC=../wisdomforge-src npm run ingestIngest records the source git SHA, filters public/search-index.json, and rewrites data/catalog.json and data/search-index.json. Commit data/ afterward. CI does not re-run ingest; it tests the committed catalog.
Ingest reads config/blocked-terms.json and drops those words from catalog text, titles, and excerpts, and drops matching tokens from the search index. The rest of each document stays. Michael can add terms to config/blocked-terms.json. After changing the list, run ingest again (or tsx scripts/blocked-terms.ts to filter the committed data/ files) and npm run check:terms. That check scans every file under data/ and fails if a listed term is still present. CI runs it.
If booklets.ts changes BAND_TO_LEVEL, ingest fails until src/types.ts is updated to match.
Marketplace checklist
Form: https://x.ai/bot/marketplace/submit-a-plugin
Org handle:
smfworksWebsite:
https://smfwisdomforge.comLogo:
assets/logo.svgis a 1:1 mark with a solid background plate. Export a PNG from it if the form requires one.Listing targets: Grok Bot and Cursor (the form also mentions Grok as coming soon)
Public HTTPS MCP URL: the deployed
/mcpURL. The placeholderhttps://wisdomforge-mcp.vercel.app/mcpis not live yet.License: this repository is MIT, Copyright (c) 2026 SMF Works. The curriculum repo is also MIT. Confirm content redistribution before submitting.
Child safety: the plugin is read-only, holds no learner profiles, and does not ask for names, schools, or photos. Recommendations stay in the requested age band. Say that on the listing.
License
MIT. Copyright (c) 2026 SMF Works. See LICENSE.
Available Tools
11 toolsget_catalog_infoGet catalog infoBRead-onlyIdempotent
Counts by item type, content version (source git SHA and search-index build time), level mapping, and the license and child-safety notes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
get_course_outlineGet course outlineBRead-onlyIdempotent
Ordered chapters or sittings for a course_id from list_courses. Each entry has an item_id.
| Name | Required | Description | Default |
|---|---|---|---|
| course_id | Yes |
get_itemGet itemARead-onlyIdempotent
Fetch one catalog item. include=summary returns metadata, a short excerpt, media, and the Hermes prompt. include=chapters adds chapter text. include=full adds the stored body text.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | ||
| item_id | Yes |
get_lesson_plan_seedGet lesson plan seedBRead-onlyIdempotent
Objectives, Hermes pairing line and prompt, discussion questions, activities, cautions, and printable links for an item. learner_profile is optional and is not stored.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | ||
| learner_profile | No |
get_media_urlsGet media URLsARead-onlyIdempotent
Public media URLs for an item (pdf, epub, mp3, image, markdown), with MIME type and size when known. The server does not proxy bytes. kinds filters the list; omit it for every kind on the item.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | ||
| item_id | Yes |
list_age_bandsList age bandsARead-onlyIdempotent
The four WisdomForge age bands with age ranges, promises, and the booklet level mapping (elementary, middle, high, adult).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
list_by_age_bandList by age bandARead-onlyIdempotent
Page lessons, books, booklets, audio, and demos for one age band. Optional subject and type filters. cursor is opaque; pass nextCursor back for the next page. Default limit 20.
| Name | Required | Description | Default |
|---|---|---|---|
| band | Yes | ||
| type | No | ||
| limit | No | ||
| cursor | No | ||
| subject | No |
list_coursesList coursesCRead-onlyIdempotent
Books and lesson tracks in title order. A course is a book or a subject unit's sittings for one band. Each row includes ordered item ids.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | ||
| subject | No |
list_subjectsList subjectsARead-onlyIdempotent
The ten subjects with item counts. Pass band to count only items in that age band. Index documents are not counted.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No |
recommend_for_learnerRecommend for learnerBRead-onlyIdempotent
Deterministic ranking for one request. Age maps to a band (through 10 little, 11–14 young, 15–18 emerging, 19+ adult). Other bands are excluded. Auditory learners are boosted toward audio, reading learners toward books and printables, visual learners toward images and art, kinesthetic learners toward lessons with a Try This. No model is called and nothing is stored.
| Name | Required | Description | Default |
|---|---|---|---|
| age | Yes | ||
| limit | No | ||
| subjects | No | ||
| interests | No | ||
| exclude_ids | No | ||
| learning_style | Yes |
search_contentSearch contentARead-onlyIdempotent
Rank WisdomForge items for a query. Uses the site's BM25 search index for corpus documents and the same tokenizer over catalog titles and excerpts. Optional filters: band, subject, type, figure. Default limit 10.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | Age band: little, young, emerging, or adult | |
| type | No | ||
| limit | No | Max hits, default 10 | |
| query | Yes | Search text | |
| figure | No | Figure slug, for example epictetus | |
| subject | No |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
11 tool updates
v1.0.0- First observed
get_catalog_info - First observed
get_course_outline - First observed
get_item - First observed
get_lesson_plan_seed - First observed
get_media_urls - First observed
list_age_bands - First observed
list_by_age_band - First observed
list_courses - First observed
list_subjects - First observed
recommend_for_learner - First observed
search_content
TDQS
Scored across 11 tools
Most tools have distinct purposes, but a few boundaries blur: get_item can return media while get_media_urls exists specifically for media URLs, and list_courses already includes ordered item IDs that get_course_outline also provides. Descriptions largely clarify intended use.
All names use snake_case with clear verb prefixes (get_, list_, search_, recommend_). The pattern is predictable throughout, with only minor prepositional variants like list_by_age_band.
Eleven tools is well within a healthy range for a read-only content catalog. Each tool covers a distinct facet: discovery, detail, media, lesson plans, recommendation, and catalog metadata.
The surface covers the full read lifecycle for this domain: browse by age band/subject, search, course outlines, item details, media URLs, lesson plan seeds, recommendations, and catalog metadata. No obvious gaps for content discovery or lesson preparation.
Maintenance
Related MCP Connectors
Read-only search and retrieval of published books, articles and authors, with public catalog links.
Public read-only MCP access to digital learning concepts, semantic relationships, and citations.
Read-only access to Epivo's live course catalogue for AI agents.
Anonymous read-only access to source-backed public SHAR Production knowledge.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides read-only access to LessonLab's lesson workflow, pricing, FAQ, and official links for MCP-compatible AI clients.3MIT
- AlicenseNot gradedqualityCmaintenancePublic, read-only MCP server exposing structured metadata about the Makuri EdTech platform, including tools for platform info, languages, subjects, pricing, safety, compliance, tech stack, contact, free resources, and interactive panels. Designed for AI assistants to query platform details without accessing user data.MIT
- AlicenseNot gradedqualityBmaintenanceProvides read-only search and context-pack creation over a local source library, letting AI assistants retrieve relevant excerpts and audit cited quotations.20MIT
- AlicenseBqualityCmaintenanceEnables read-only search and exploration of the GenizahSearch research API, including manuscript search, page browsing, parallel finding, and multi-phrase queries, along with policy resources and research prompts.4Creative Commons Attribution Non Commercial Share Alike 4.0 International