Skip to main content
Glama
smfworks

wisdomforge-mcp

Official
by smfworks

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:

  1. 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_SRC defaults to ../wisdomforge-src.

  2. Public PDFs in public/downloads. Ingest runs pdftotext and stores an excerpt plus per-chapter text on each book and booklet. A missing local PDF can be fetched from https://smfwisdomforge.com/downloads/<name>. If extraction returns almost no text, ingest falls back to the sibling .md published next to that PDF. Those markdown files are the public manuscripts, not the private 1,332-document corpus.

  3. Search-index rows become index_doc items. They are searchable through the ported BM25 index (tokenizer and ranking copied from src/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

search_content

query, band?, subject?, type?, figure?, limit=10

Ranked hits with snippet, url, item_id

get_item

item_id, include=summary|full|chapters

Metadata, body or outline, media, Hermes prompt

list_age_bands

—

4 bands, age ranges, level mapping

list_subjects

band?

10 subjects with counts

list_by_age_band

band, subject?, type?, cursor?, limit?

Paged items and nextCursor

list_courses

band?, subject?

Books and lesson tracks, ordered item ids

get_course_outline

course_id

Ordered chapters or sittings with item ids

get_media_urls

item_id, kinds?

Public URLs, MIME type, size when known

get_lesson_plan_seed

item_id, learner_profile? {age, learning_style, interests}

Objectives, Hermes pairing line and prompt, discussion questions, printables

recommend_for_learner

age, learning_style (visual|auditory|reading|kinesthetic), interests[], subjects?, exclude_ids?, limit?

Deterministic ranking and a rationale. No model call

get_catalog_info

—

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:http

dev: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:terms

smoke 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:

  1. Push the repo to GitHub under the smfworks org (this workspace does not push).

  2. Import the project in Vercel. Framework preset: Other. Install command: npm ci. Build command can be empty; the function is api/mcp.ts and reads data/ at runtime.

  3. Do not add a model API key. None is used.

  4. vercel.json rewrites /mcp to /api/mcp and includes data/** in the function bundle.

  5. Deploy. The public URL will look like https://<project>.vercel.app/mcp. Replace the placeholder in this README and in the marketplace form.

  6. Confirm POST /mcp with an MCP initialize returns a result, and that GET and DELETE respond (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 ingest

Ingest 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: smfworks

  • Website: https://smfwisdomforge.com

  • Logo: assets/logo.svg is 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 /mcp URL. The placeholder https://wisdomforge-mcp.vercel.app/mcp is 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 tools
get_catalog_infoGet catalog infoB
Read-onlyIdempotent

Counts by item type, content version (source git SHA and search-index build time), level mapping, and the license and child-safety notes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered without the description. The description adds content-level context (that version info includes a source git SHA and search-index build time, and that license/child-safety notes are included), which is genuinely useful and not in the annotations. It stops short of describing return structure or freshness guarantees.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no filler — every listed element corresponds to real returned content. It is slightly weakened by being a bare fragment with no leading verb, which makes the first read feel like a field dump rather than a statement of what the tool does.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries the burden of explaining return values, and it does list the four buckets of returned data. But it gives no sense of structure, key names, or scale (e.g. how counts are grouped), which for a zero-parameter inspect-the-catalog tool is only a partial account.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4. There are no inputs whose semantics could be ambiguous, and the schema is fully documented. No deduction is warranted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description enumerates the categories of information the tool surfaces (item-type counts, content version, level mapping, license and child-safety notes), which is more specific than the title alone. However, it is a verbless noun fragment — it never states that the tool *returns* catalog-wide metadata, so the action is only inferred. It does at least distinguish itself from item-level siblings like get_item and list_courses.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to reach for this tool versus list_courses, list_subjects, list_age_bands, or the other catalog-adjacent siblings. No prerequisites, no context, no exclusions are given. The agent must guess that this is the whole-catalog overview rather than a filtered listing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_course_outlineGet course outlineB
Read-onlyIdempotent

Ordered chapters or sittings for a course_id from list_courses. Each entry has an item_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered. The description adds the ordering guarantee and the presence of item_id in each entry, which is useful return-shape context, but says nothing about pagination, empty results, or invalid course_id behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler, and the core scoping fact (course_id sourced from list_courses) is front-loaded. The first sentence is slightly compressed and reads awkwardly as a fragment, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of describing returns; it does state entries are ordered and carry an item_id, which is the key shape information. It leaves gaps around what a 'sitting' is, whether results are paginated, and what an error response looks like, but for a simple annotated read tool this is close to adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single parameter, but course_id is largely self-explanatory from its name. The description does add provenance value by stating it comes from list_courses, which is more than the bare schema offers, though no format, length, or validation context is given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (ordered chapters/sittings for a course) and its granularity (each entry has an item_id), which is enough to tell it apart from siblings like get_item or search_content. It stops short of an explicit verb, reading as a noun phrase rather than 'retrieves the ordered outline of...', but the intent is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'a course_id from list_courses' implies the prerequisite that list_courses must be called first to obtain the id, which is genuine routing guidance. However, there is no explicit when-to-use/when-not statement or mention of alternatives such as get_item for drilling into an individual entry.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_itemGet itemA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNo
item_idYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context by disclosing what each include mode returns (metadata/excerpt/media/prompt, chapter text, stored body). It does not cover failure behavior for an unknown item_id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action, then progressively detailing each include mode. Every sentence carries distinct information and no padding is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must characterize returns, and it does so per include mode. For a simple two-parameter read tool this is nearly complete; only error/not-found behavior and item_id expectations are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and does largely meet it: it defines the meaning of all three enum values for include and their additive relationship (chapters adds to summary, full adds body). item_id is only implied by 'one catalog item' – no format or constraint guidance is given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Fetch one catalog item.' That contrasts implicitly with siblings like search_content (multi-result) and list_* (enumeration), though no sibling is named explicitly. Clear enough for an agent to select it when it already has an item_id.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The three include modes give practical guidance on how much to request, which is a form of usage steering. However, there is no explicit when-to-use/when-not-to-use statement versus alternatives such as search_content or get_media_urls, nor any prerequisite context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_lesson_plan_seedGet lesson plan seedB
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
learner_profileNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered structurally. The description adds one genuinely useful behavioral fact — that learner_profile is not stored — but says nothing about auth, rate limits, or whether the returned 'seed' is cached or generated on demand.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the first front-loads the return payload and the second handles the one behavioral caveat. The opening sentence is a dense comma list rather than a purpose statement, which slightly hurts front-loading of the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates what is returned, which is the main completeness requirement here. It is still thin on item_id semantics and on what the enumerated artifacts look like (e.g., format of 'printable links'), but for a read-only retrieval tool it covers the essentials.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden, and it partially compensates by explaining that learner_profile is optional and not persisted. However, it never explains item_id (the required parameter), nor does it map any of the nested learner_profile fields (age, interests, learning_style), leaving the enum-bearing nested object undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description enumerates the specific payload this tool returns (objectives, Hermes pairing line/prompt, discussion questions, activities, cautions, printable links) for an item, which is concrete and lets an agent infer it is a lesson-plan retrieval tool. It stops short of a clear verb-object opener and does not differentiate itself from the sibling get_item, which plausibly returns related item data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus get_item, get_course_outline, or the other retrieval siblings, and no prerequisite or context conditions are stated. The only conditional language ('learner_profile is optional') is parameter framing rather than usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_media_urlsGet media URLsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindsNo
item_idYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, yet the description still adds real behavioral context: no byte proxying (the caller must fetch the URL itself) and that MIME type and size are returned only 'when known'. It does not mention auth requirements or ordering of results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, no filler, and the return-shape information is front-loaded ahead of the parameter note. Every sentence carries distinct information (what is returned, what is not provided, how to filter).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly carries the burden of describing the return (URLs plus MIME type and size when known), which is the essential information for a read-only lookup tool. Minor gaps: no note on result ordering, empty-result behavior, or whether URLs expire.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate — and it does for 'kinds': it lists the accepted kinds and, crucially, discloses the default behavior when omitted ('omit it for every kind'), which the schema does not. It never mentions 'item_id' or its expected format, leaving one of two parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Public media URLs for an item') and enumerates the concrete kinds returned, so an agent immediately knows this retrieves links rather than content. It does not explicitly contrast with the closest sibling (get_item), but the resource is specific enough to be distinguishable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: 'The server does not proxy bytes' tells the agent this yields URLs for client-side fetching, but there is no explicit when-to-use or when-to-prefer-an-alternative guidance versus get_item or search_content. Adequate but with a clear gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_age_bandsList age bandsA
Read-onlyIdempotent

The four WisdomForge age bands with age ranges, promises, and the booklet level mapping (elementary, middle, high, adult).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and a closed world, so the safety and repeatability profile is fully covered structurally. The description's added value is disclosing the shape of the returned data (four fixed entries, each with ranges, promises, and level mapping), which matters because no output schema exists. It does not add ordering, count stability, or pagination context beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with no filler, and the most important fact (there are exactly four bands) is front-loaded. It is a noun phrase rather than a sentence, which reads slightly like a label, but nothing is wasted and nothing important is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, no output schema, and annotations carrying the full safety profile, the only real burden is describing what comes back — and the description does that by listing the three fields per band. The tool is simple enough that nothing critical is missing; only the relationship to list_by_age_band is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The schema is empty and correctly so for a static reference listing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the exact resource (the four WisdomForge age bands) and enumerates what each entry contains: age ranges, promises, and booklet level mapping. That is enough for an agent to know this is a taxonomy lookup. It stops short of distinguishing itself from the similarly named sibling list_by_age_band, which is the one ambiguity an agent would face.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use statement and no named alternative, even though list_by_age_band and list_subjects sit right beside it. The usage is implied by the content: call this to obtain the canonical band taxonomy (e.g. to resolve an age range to a band label) before calling list_by_age_band. Implied but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_by_age_bandList by age bandA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bandYes
typeNo
limitNo
cursorNo
subjectNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, and the description adds real context beyond them: the cursor is opaque, nextCursor is passed back for the next page, and the default limit is 20. Return shape details beyond the cursor hint are still absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with purpose and followed by filters and pagination mechanics; every sentence carries information. The enumerated content-type list is slightly verbose but justified for scoping.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully discloses the pagination contract (opaque cursor, nextCursor, default limit) that an agent needs to iterate pages. What remains thin is the age-band enum semantics and differentiation from sibling search tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does for cursor (opaque, echo nextCursor back), limit (default 20), and the subject/type filters. It does not explain the band parameter beyond "one age band," nor that it is required or what the four band values mean.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (page) and resource set (lessons, books, booklets, audio, demos) scoped to one age band, plus the filter axes. It is clear what the tool returns, but it never contrasts itself with the similar sibling search_content, so sibling differentiation is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Optional subject and type filters" and the pagination instruction imply browsing-by-band usage, but there is no explicit when-to-use or when-not-to-use guidance versus search_content or list_courses. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_coursesList coursesC
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bandNo
subjectNo

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds two genuinely useful behavioral facts beyond that: results are sorted by title and each row carries ordered item ids. It says nothing about pagination, result size, or what happens when no band/subject is supplied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no obvious padding, and the return-shape fact is front-loaded. But the middle sentence is dense domain jargon ('a subject unit's sittings') that costs more reading than it repays, and the ordering detail is split awkwardly from the row-content detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does useful work by stating the sort order and that rows contain ordered item ids. For a two-parameter filtered list tool, though, the absence of any filter semantics, optionality, or pagination behavior leaves real gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for both parameters, so the description must compensate and largely does not. The phrase 'for one band' hints at the band parameter but never explains what a band is, and the subject parameter is not referenced at all; it is also unstated that both filters are optional and that omitting them returns the full catalog.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description defines the domain concept ('A course is a book or a subject unit's sittings for one band') and says rows include ordered item ids, so the agent can infer it returns course listings in title order. However, it never states the action plainly ('lists all courses') and the opening phrase 'Books and lesson tracks in title order' is ambiguous about whether books and lesson tracks are the returned entities or something else. It does not differentiate itself from siblings like get_course_outline or list_by_age_band.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no mention of alternatives, despite siblings such as get_course_outline, list_by_age_band, search_content, and get_catalog_info that plausibly overlap. The agent is left to guess whether this is the browse-everything call or a filtered one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_subjectsList subjectsA
Read-onlyIdempotent

The ten subjects with item counts. Pass band to count only items in that age band. Index documents are not counted.

ParametersJSON Schema
NameRequiredDescriptionDefault
bandNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds real behavioral context beyond them: the result set is capped at ten subjects, index documents are excluded from counts, and band narrows the counted population. Return format/ordering is not described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three terse sentences, front-loaded with what the tool returns, then the parameter effect, then the counting exclusion. No filler and nothing repeated from structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one optional enum parameter and no output schema, the description covers result size, count semantics, and an important exclusion. It is nearly complete, with only minor gaps such as ordering or what counts as a subject.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single 'band' parameter, so the description must compensate, and it does explain that band limits which items are counted. However it never explains the enum values (little/young/emerging/adult) or defaults, so the semantics are only partially covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List subjects') with item counts and a ten-item cap, which is concrete enough for an agent to know what it returns. It does not distinguish itself from nearby siblings like list_age_bands or list_by_age_band, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage instruction is about the band parameter ('Pass band to count only items in that age band'), which is parameter behavior rather than tool-selection guidance. No when-to-use, when-not-to-use, or alternative (e.g. list_by_age_band) is named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recommend_for_learnerRecommend for learnerB
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ageYes
limitNo
subjectsNo
interestsNo
exclude_idsNo
learning_styleYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world scope, so the safety profile is covered. The description adds genuinely new behavioral context beyond them: ranking is deterministic, no model/LLM call occurs, nothing is persisted, and cross-age-band results are filtered out. It does not describe the response shape or ordering guarantees, which keeps it out of 5 territory.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five short sentences, no filler, and the core purpose is front-loaded before the mapping tables. The band and style mappings are dense but each clause adds real information; the only mild weakness is that 'Other bands are excluded' is terse enough to be slightly ambiguous about what exactly is excluded from.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter recommendation tool with no output schema, the description covers the ranking logic well but omits what the caller receives (item shape, ordering, default/max limit behavior) and how subjects, interests, and exclude_ids influence or filter the ranking. Annotations cover safety, but the return-value and non-required-parameter gaps leave the definition only minimally complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It does so well for the two required parameters — age is mapped to explicit bands (<=10 little, 11–14 young, 15–18 emerging, 19+ adult) and learning_style drives a documented boost toward audio, books/printables, images/art, or lessons with a 'Try This'. However, limit, subjects, interests, and exclude_ids receive no interpretation at all, leaving four of six parameters undocumented in both schema and prose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (deterministic ranking of content for a single learner request) and details the ranking rules by age band and learning style, so the agent understands the resource being produced. It falls short of a 5 because it never names the siblings it could be confused with (e.g. search_content / list_by_age_band) or explicitly says it returns a ranked recommendation list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to reach for this tool versus search_content, list_by_age_band, or the other catalog siblings, and no prerequisites are given. The only usage-adjacent information is the behavioral note that other age bands are excluded from results, which is a filtering rule rather than guidance on tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_contentSearch contentA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bandNoAge band: little, young, emerging, or adult
typeNo
limitNoMax hits, default 10
queryYesSearch text
figureNoFigure slug, for example epictetus
subjectNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context about how ranking works (BM25 index for corpus docs, same tokenizer over catalog titles/excerpts), but says nothing about result shape, scoring fields, or empty-result behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the action and resource, then mechanics, then parameters. The BM25/tokenizer sentence is denser than strictly necessary but earns its place by explaining why catalog titles and corpus documents are searched differently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Six parameters, three enums, and no output schema, so the description should ideally sketch what comes back (ranked items, scores, hit count). It covers the input side well but leaves return values entirely unaddressed; annotations at least carry the read-only/idempotent profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 67% schema coverage, the schema documents band, limit, query, and figure but leaves type and subject bare. The description compensates by naming all four optional filters and restating the default limit of 10, adding the key fact that these narrow rather than require.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Rank WisdomForge items for a query.' That clearly separates it from the get_*/list_* siblings, which retrieve known items rather than rank by relevance. It stops short of naming any sibling explicitly, so it is clear but not differentiated by comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (have a free-text query, optionally narrow by band/subject/type/figure) but never says when to prefer this over recommend_for_learner or list_by_age_band. No exclusions or preconditions are given, so the agent must infer the routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv1.0.0
    • First observedget_catalog_info
    • First observedget_course_outline
    • First observedget_item
    • First observedget_lesson_plan_seed
    • First observedget_media_urls
    • First observedlist_age_bands
    • First observedlist_by_age_band
    • First observedlist_courses
    • First observedlist_subjects
    • First observedrecommend_for_learner
    • First observedsearch_content

TDQS

A3.7/5.0

Scored across 11 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Public, 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
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides read-only search and context-pack creation over a local source library, letting AI assistants retrieve relevant excerpts and audit cited quotations.
    20
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables 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.
    4
    Creative Commons Attribution Non Commercial Share Alike 4.0 International