nctb-mcp
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., "@nctb-mcpShow me Class 9 Physics chapter 3 and its PDF pages"
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.
nctb-mcp
An MCP server that lets any AI assistant look up the Bangladesh NCTB curriculum by chapter, section and learning
objective, with the official PDF page for everything it returns. Works offline (npx), read-only, no API keys.
v0.1 scope: Class 9-10 (SSC) Physics, 2026 edition, Bangla version and English version. All data is machine-extracted and marked
verified: falseuntil a human checks it. See Data status.
You: Give me Class 9 physics chapter 3.
Claude: (calls get_topic {chapter: 3})
Chapter 3, বল (Force), PDF pages 67-102 (printed 62-97): 9 sections, 3.1 জড়তা এবং বলের ধারণা:
নিউটনের প্রথম গতি সূত্র … 3.9 ঘর্ষণ বল, plus 12 subsections. 12 learning objectives,
6 worked examples, 7 MCQ + 2 creative + 4 short exercise items. Read it in the official NCTB PDF from page 67.Use it from Claude Desktop, Cursor or any MCP client
{
"mcpServers": {
"nctb": { "command": "npx", "args": ["-y", "nctb-mcp"] }
}
}Claude Desktop: Settings › Developer › Edit Config (
claude_desktop_config.json), paste the block, restart.Cursor:
~/.cursor/mcp.json(global) or.cursor/mcp.json(project), same block.From a local checkout (before the npm release):
"command": "node", "args": ["/path/to/nctb-mcp/dist/cli.js"].
Related MCP server: BNCC MCP Server
Tools
Every response is small JSON with IDs for drill-down, the source PDF page (and printed page), and the
verified flag.
Tool | Input | Returns |
|
| Book info, 13 chapters with IDs, titles, page ranges, topic counts |
|
| A chapter with its sections, or a section with subtopics and neighbours |
|
| Matching chapters, sections and objectives |
|
| The chapter's learning outcomes ("... পারব" / "be able to ...") |
|
| Exercise items and worked examples as pointers (ID, number, page) |
Subjects accept English, Bangla or romanised Bangla (physics, পদার্থবিজ্ঞান, podartho biggan). Classes accept
9, 10, 9-10, SSC, নবম, দশম. Section numbers accept Bangla digits ("৩.২"). version is bn
(default) or en; the two versions are separate books with different page numbers.
Example responses
Real output of the built server (v0.1.0, captured with the MCP Inspector CLI on 2026-11-07).
get_topic {"chapter": 1, "topic": "1.5"}
{
"type": "topic",
"id": "nctb:phy:c9-10:bn:ch01:t05",
"number": "1.5",
"title": "ভৌত রাশি এবং তাদের পরিমাপ",
"printed_page": 14,
"pdf_page": 19,
"verified": false,
"level": "topic",
"chapter": {
"id": "nctb:phy:c9-10:bn:ch01",
"number": 1,
"title": "ভৌত রাশি এবং তাদের পরিমাপ"
},
"parent_id": null,
"subtopics": [
{
"id": "nctb:phy:c9-10:bn:ch01:t05:s01",
"number": "1.5.1",
"title": "পরিমাপের একক",
"title_alt": "Units of Measurements",
"printed_page": 15,
"pdf_page": 20,
"verified": false
},
{
"id": "nctb:phy:c9-10:bn:ch01:t05:s02",
"number": "1.5.2",
"title": "উপসর্গ বা গুণিতক",
"title_alt": "Prefix",
"printed_page": 17,
"pdf_page": 22,
"verified": false
},
{
"id": "nctb:phy:c9-10:bn:ch01:t05:s03",
"number": "1.5.3",
"title": "মাত্রা",
"title_alt": "Dimension",
"printed_page": 18,
"pdf_page": 23,
"verified": false
},
{
"id": "nctb:phy:c9-10:bn:ch01:t05:s04",
"number": "1.5.4",
"title": "বৈজ্ঞানিক প্রতীক ও সংকেত",
"title_alt": "Scientific Symbols and Notations",
"printed_page": 19,
"pdf_page": 24,
"verified": false
}
],
"previous_id": "nctb:phy:c9-10:bn:ch01:t04:s03",
"next_id": "nctb:phy:c9-10:bn:ch01:t05:s01",
"worked_example_ids": [],
"source": {
"book_id": "nctb:phy:c9-10:bn",
"printed_page": 14,
"pdf_page": 19,
"pdf_urls": [
"https://drive.google.com/file/d/13P5E08HcNbpALj8-aC-RUCy0d3iwodet/view",
"https://drive.egovcloud.gov.bd/index.php/s/KOdI1T0gyhPiFRz"
],
"official_listing_url": "https://nctb.gov.bd/pages/static-pages/695b99afc4774958d7b70612",
"edition": 2026
},
"notice": "Structure, IDs, objectives and page pointers only. Textbook content belongs to NCTB (all rights reserved); open the official PDF page for the text. Items are machine-extracted (OCR) and verified=false until a human checks them."
}search_curriculum {"query": "momentum", "version": "en", "limit": 3}
{
"query": "momentum",
"hits": [
{
"id": "nctb:phy:c9-10:en:ch03:t04",
"type": "topic",
"number": "3.4",
"title": "Momentum",
"chapter_id": "nctb:phy:c9-10:en:ch03",
"version": "en",
"printed_page": 70,
"pdf_page": 75,
"verified": false
},
{
"id": "nctb:phy:c9-10:en:ch03:t05:s01",
"type": "topic",
"number": "3.5.1",
"title": "Conservation of Momentum and Energy",
"chapter_id": "nctb:phy:c9-10:en:ch03",
"version": "en",
"printed_page": 71,
"pdf_page": 76,
"verified": false
},
{
"id": "nctb:phy:c9-10:en:ch03:o08",
"type": "objective",
"title": "explain the conservation laws of momentum and collision.",
"chapter_id": "nctb:phy:c9-10:en:ch03",
"version": "en",
"printed_page": 62,
"pdf_page": 67,
"verified": false
}
]
}An unknown ID returns isError: true with
{"error": "Unknown ID nctb:phy:c9-10:bn:ch99", "hint": "Use list_chapters or search_curriculum to get valid IDs."}.
IDs
nctb:<subject>:<class>:<version>:ch<NN>[:t<NN>[:s<NN>] | :o<NN> | :we<NN> | :ex:<kind><NN>], e.g.
nctb:phy:c9-10:bn:ch03:t02 = Physics, Classes 9-10, Bangla version, chapter 3, section 3.2. Topic numbers are the
book's own section numbers. Full scheme: IDS.md. The same IDs are used by the BanglaEdu Bench.
What is in the data, and what is not
Shipped ( | Not shipped |
Chapter and section numbers and headings (Bangla + English terms) | Body text of the books |
Chapter learning-objective lines | Worked-example questions or solutions |
Printed page and PDF page of every item | Exercise / MCQ / creative-question text |
Counts and positions of worked examples and exercise items | Board exam questions |
Source PDF URLs, file name, SHA-256, size, edition history | Any OCR'd page text |
The NCTB textbooks are © NCTB, "[All rights reserved by the Publisher]". The PDFs are free from NCTB; this package points to them instead of copying them. See DATA_LICENSE.md.
Data provenance
Book | Official file | SHA-256 (first 12) | PDF pages | Text layer |
পদার্থবিজ্ঞান (Bangla version) |
|
| 366 | none |
Physics (English version) |
|
| 366 | ~20 pages |
Both were downloaded on 2026-11-07 from the links on NCTB's page "২০২৬ শিক্ষাবর্ষের মাধ্যমিক স্তরের নবম-দশম শ্রেণির পাঠ্যপুস্তক" (https://nctb.gov.bd/pages/static-pages/695b99afc4774958d7b70612). The Google Drive and egovcloud mirrors NCTB links serve files of identical size.
Pipeline (pipeline/, Python + Tesseract 5):
OCR every page (
ocr.sh <pdf> <out-dir> <langs> [dpi]; resumable,JOBS/TESSDATA_PREFIXfrom the environment): the PDFs are scanned images, so there is no text to extract directly. Bangla book:ben+engtessdata_best at 200 dpi. English book:engat 150 dpi. Run everything withOCR_DIR=<ocr> [PDF_DIR=<pdfs>] pipeline/run.sh.Fix Bangla Unicode and conjuncts (
fix_bangla.py): NFC, one form for য়/ড়/ঢ়, stray zero-width characters,|→।, and a reviewed word list for OCR conjunct errors (ভোত→ভৌত, যন্দ্র→যন্ত্র, ত্রটি→ত্রুটি, ধুবক→ধ্রুবক …). Legacy Bijoy/SutonnyMJ text is detected and reported, never returned.Structure (
structure.py): chapter list hand-transcribed from the printed contents page; sections from numbered headings; objectives from the chapter-opening list; worked examples from "প্রশ্ন:/Question:" inside example boxes; exercise items from the "নমুনা প্রশ্ন / Sample Questions" section. Running headers and footers removed.Cross-check (
pair.py): the English term printed in each Bangla heading is matched against the English book's heading with the same number. Agreement setsconcept_key_checked.Agent corrections (
books/*.corrections.json): fixes made after looking at the page image (OCR-garbled headings and objectives, headings whose number OCR could not read, merged bullets). Each carries its reason and page and setsagent_checked: true; none setsverified. Real differences between the two printed books are recorded inbooks/physics-9-10.pairing.json.Hand-check (
review.py,apply_review.py): a review sheet and CSV; only a named human can setverified: true.
Data status
Coverage per chapter, Bangla / English (sections / objectives / worked examples / MCQ-creative-short items):
Ch | Bangla title | bn | en |
1 | ভৌত রাশি এবং তাদের পরিমাপ | 22 / 13 / 3 / 6-2-4 | 22 / 13 / 3 / 6-2-4 |
2 | গতি | 8 / 7 / 8 / 5-2-4 | 8 / 7 / 8 / 5-2-4 |
3 | বল | 21 / 12 / 6 / 7-2-4 | 21 / 12 / 6 / 7-2-4 |
4 | কাজ, ক্ষমতা ও শক্তি | 15 / 11 / 9 / 6-2-4 | 15 / 11 / 9 / 6-2-4 |
5 | পদার্থের অবস্থা ও চাপ | 14 / 17 / 14 / 5-2-4 | 14 / 17 / 14 / 5-2-4 |
6 | বস্তুর ওপর তাপের প্রভাব | 12 / 17 / 11 / 5-2-4 | 12 / 17 / 11 / 5-2-4 |
7 | তরঙ্গ ও শব্দ | 11 / 9 / 7 / 5-3-4 | 11 / 10 / 7 / 5-3-4 |
8 | আলোর প্রতিফলন | 17 / 10 / 10 / 5-2-4 | 17 / 10 / 10 / 5-2-4 |
9 | আলোর প্রতিসরণ | 15 / 8 / 7 / 5-1-4 | 15 / 8 / 7 / 5-1-4 |
10 | স্থির বিদ্যুৎ | 16 / 10 / 9 / 5-2-4 | 16 / 10 / 9 / 5-2-4 |
11 | চল বিদ্যুৎ | 16 / 17 / 9 / 6-2-4 | 16 / 17 / 9 / 6-2-4 |
12 | বিদ্যুতের চৌম্বক ক্রিয়া | 9 / 7 / 4 / 5-2-4 | 9 / 7 / 4 / 5-2-4 |
13 | তেজস্ক্রিয়তা ও ইলেকট্রনিকস | 14 / 5 / 1 / 4-1-4 | 14 / 5 / 1 / 4-1-4 |
Both books: 13 chapters, 190 sections, 98 worked-example pointers, 146 exercise-item pointers; 143 (bn) and 144 (en) objectives. The one count difference is in the printed books themselves (ch. 7: the English book lists one more outcome), confirmed on the page images.
Section numbering differs in two places in the printed books (en skips 8.2.2 and 8.8.4), so bn 8.2.2/8.8.4 correspond to en 8.2.3/8.8.5.
Chapter titles and start pages: checked by eye against both contents pages.
Sections, objectives and counts: OCR + automatic bn/en cross-checks + agent corrections on page images (
agent_checked). Remaining issues are listed per item inreview.flagsand in the review sheet.verified: true: 0 items. Nothing has been human-verified yet.
Develop
pnpm install
pnpm test # vitest: tool behaviour + data invariants + JSON Schema
pnpm lint && pnpm format:check
pnpm build && node dist/cli.js --version
pnpm inspect # MCP Inspector UI
npx @modelcontextprotocol/inspector --cli node dist/cli.js --method tools/listData lives in ../nctb-shared/data during development; pnpm sync-data copies it into data/, which is what the
npm package ships.
Before publishing
Open decisions for the owner (see DATA_LICENSE.md): whether shipping the books' headings and learning-objective lines is acceptable without NCTB's permission, and which licence covers the metadata compilation. Until then there is no npm release.
Licence
Code: MIT. NCTB textbook content belongs to NCTB and is not covered by the MIT licence. Not affiliated with NCTB.
Available Tools
5 toolsget_exercisesEnd-of-chapter exercises and worked examples (pointers)ARead-onlyIdempotent
Lists the exercise items at the end of a chapter (multiple choice, creative/সৃজনশীল with parts ক-ঘ, short answer, numerical) and the worked examples inside it, as IDs with page numbers. Question text is NOT included (NCTB copyright): use the pdf_page to read it, or write your own practice questions for the topic.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Chapter ID or any ID inside the chapter. | |
| kind | No | Only this kind. | |
| class | No | Class, e.g. "9", "10", "9-10" or "SSC". Classes 9 and 10 share one book. Default 9-10. | |
| chapter | No | ||
| subject | No | Subject in English, Bangla or romanised Bangla, e.g. "physics", "পদার্থবিজ্ঞান". Default physics (the only subject in v0.1). | |
| version | No | Book version: "bn" = Bangla version (default), "en" = English version. Separate books with different page numbers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, closed-world behavior, so the remaining burden is light. The description adds genuinely useful context beyond that: the return shape is IDs plus page numbers, and question text is deliberately omitted for NCTB copyright reasons, which prevents a caller from wrongly expecting content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what is returned, followed immediately by the critical constraint and the workaround. No filler and nothing dangling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter, fully optional list tool with no output schema, the description covers return content, the copyright limitation, and the alternative path adequately; per-parameter defaults are carried by the schema. The only minor gap is behavior when no id or chapter is supplied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high at 83%, so baseline is 3, but the description earns a bump by decoding the cryptic enum values — mcq, cq, sq, num become multiple choice, creative/সৃজনশীল with parts ক-ঘ, short answer, and numerical. That mapping is meaning not present in the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-and-resource pair — listing end-of-chapter exercise items and in-chapter worked examples — and enumerates the four exercise kinds. It clearly distinguishes itself from siblings like get_topic or list_chapters by being about the exercise/example inventory rather than curriculum content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit follow-on route when the caller needs actual question text: read it via pdf_page, or author your own practice questions. It does not explicitly state when to prefer this over the other four siblings, but the resource scope makes that nearly self-evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_objectivesLearning objectives of a chapterARead-onlyIdempotent
The learning outcomes NCTB lists at the start of a chapter ("এই অধ্যায় শেষে আমরা ... পারব" / "By the end of this chapter we will be able to"). Pass a chapter ID (or any ID inside it), or chapter number with subject/version.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Chapter ID or any ID inside the chapter. | |
| class | No | Class, e.g. "9", "10", "9-10" or "SSC". Classes 9 and 10 share one book. Default 9-10. | |
| chapter | No | ||
| subject | No | Subject in English, Bangla or romanised Bangla, e.g. "physics", "পদার্থবিজ্ঞান". Default physics (the only subject in v0.1). | |
| version | No | Book version: "bn" = Bangla version (default), "en" = English version. Separate books with different page numbers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered. The description adds the useful resolution semantic that any ID nested inside the chapter will work, but is silent on what happens when a chapter has no listed objectives, on the response shape, and on behaviour when called with no parameters at all (all five are optional).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with what is returned and followed by the addressing guidance. The bilingual quote earns its place by making the resource unambiguous, and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 saying what comes back, and it does convey that the result is the chapter-opening learning outcome list. The remaining gaps — no-match behaviour and the all-optional parameter situation — are minor for a simple read-only leaf tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema already documents id, class, subject and version, including defaults. The description restates the two accepted addressing modes but adds no syntax or fallback detail beyond the schema, and the unannotated `chapter` parameter is not clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the concrete resource — the learning outcomes printed at the start of an NCTB chapter — and even quotes the recurring heading in both Bangla and English, so an agent can recognise it immediately. It does not explicitly contrast itself with siblings like get_topic or list_chapters, which would be the only thing separating a 4 from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is only implied: it says how to address a chapter (ID anywhere inside it, or chapter number with subject/version) but never states when to choose this over get_topic or list_chapters, nor any exclusions or prerequisites. The caller is left to infer that this is the leaf lookup once a chapter is identified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_topicGet a chapter, topic or item by IDBRead-onlyIdempotent
Details for one curriculum item: a chapter (returns its numbered sections/topics), a topic such as "3.2" (returns subtopics, neighbours and its page), or an objective, worked-example or exercise ID. Pass an ID like nctb:phy:c9-10:bn:ch03 or nctb:phy:c9-10:bn:ch03:t02, or pass chapter (and optionally topic like "3.2") with subject/version. Every result has the official PDF page and a verified flag. Does not return textbook text.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Any nctb: ID from another tool. | |
| class | No | Class, e.g. "9", "10", "9-10" or "SSC". Classes 9 and 10 share one book. Default 9-10. | |
| topic | No | Section number as printed in the book, e.g. "3.2" or "1.3.4" (Bangla digits accepted). | |
| chapter | No | Chapter number, used when no id is given. | |
| subject | No | Subject in English, Bangla or romanised Bangla, e.g. "physics", "পদার্থবিজ্ঞান". Default physics (the only subject in v0.1). | |
| version | No | Book version: "bn" = Bangla version (default), "en" = English version. Separate books with different page numbers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so safety and determinism are covered. The description adds genuinely new behavior: each ID kind returns different structure (sections, subtopics, neighbours), every result carries an official PDF page and a verified flag, and textbook text is explicitly out of scope. It is silent on what happens with an invalid or ambiguous ID, which is the main residual gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the returned-resource description and ending on the important scope boundary. The first sentence is long and parenthetical-heavy, embedding three item types in one clause, which makes it dense on first read but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool where all six parameters are optional, the description does the essential work of explaining that some addressing scheme must be supplied and that two schemes exist. With no output schema, it also correctly sketches the return shape (page number, verified flag) and the scope boundary. Missing are failure modes for unknown IDs and any note on how the topic's "neighbours" relate, leaving a small but real gap for a zero-required-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all six parameters are already documented, which sets the baseline at 3. The description does add structural meaning the schema cannot express: that id and the chapter/topic/subject/version combination are alternative addressing paths, and it gives concrete example ID strings. That relationship between parameters is the main value added, but per-parameter syntax is still carried by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Details for one curriculum item" names a specific resource, and the description enumerates the three ID kinds (chapter, topic like "3.2", objective/worked-example/exercise) with the shape of each result. It does not name the siblings it is distinct from, but the granularity of what each item type returns implicitly separates it from search_curriculum and list_chapters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the two invocation modes clearly: pass an nctb: ID, or pass chapter plus optional topic with subject/version. That is invocation guidance rather than selection guidance — no sibling tool is named, and the only implicit exclusion is "Does not return textbook text," which suggests a different tool without pointing to it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_chaptersList chapters of an NCTB textbookARead-onlyIdempotent
Start here. Lists the chapters of a Bangladesh NCTB textbook (v0.1: Class 9-10 / SSC Physics, 2026 edition, Bangla and English versions) with chapter IDs, titles, page ranges and topic counts. Use the returned IDs with get_topic, get_objectives and get_exercises.
| Name | Required | Description | Default |
|---|---|---|---|
| class | No | Class, e.g. "9", "10", "9-10" or "SSC". Classes 9 and 10 share one book. Default 9-10. | |
| subject | No | Subject in English, Bangla or romanised Bangla, e.g. "physics", "পদার্থবিজ্ঞান". Default physics (the only subject in v0.1). | |
| version | No | Book version: "bn" = Bangla version (default), "en" = English version. Separate books with different page numbers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and closed-world, so the safety profile is covered. The description adds genuinely new context: the v0.1 scope limit (Class 9-10 / SSC Physics, 2026 edition only) and the warning that bn and en are separate books with different page numbers. It stops short of describing ordering or result size, but the scope constraint is the load-bearing disclosure here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: entry-point cue first, payload and scope second, downstream routing last. No filler and no repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by listing the returned fields, and the v0.1 edition limitation prevents an agent from assuming broader coverage. Only the ordering of results and pagination behavior go unmentioned, which is minor for a chapter listing of a single book.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter already documents examples, defaults and the bn/en page-number distinction. The description only echoes the class range and the two available versions, adding no syntax or semantics beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ("Lists the chapters of a Bangladesh NCTB textbook") and enumerates the payload (chapter IDs, titles, page ranges, topic counts). The leading "Start here" positions it as the entry point relative to get_topic, get_objectives and get_exercises, so an agent can place it in the sibling set without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Start here" gives an explicit sequencing instruction and the second sentence names the exact downstream tools to use with the returned IDs. What is missing is any contrast with search_curriculum, the other plausible entry point, and no when-not condition is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_curriculumSearch chapters, topics and objectivesARead-onlyIdempotent
Find where a concept is taught, in Bangla or English (e.g. "ভরবেগ", "momentum", "Newton third law", "আলোর প্রতিসরণ"). Searches chapter titles, section headings and learning objectives. Returns small hits with IDs and pages; call get_topic on an ID for details. A Bangla query searches the Bangla-version book best, an English query the English-version book, unless version is set.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max hits, default 8. | |
| query | Yes | Words to find, Bangla or English. | |
| subject | No | Subject in English, Bangla or romanised Bangla, e.g. "physics", "পদার্থবিজ্ঞান". Default physics (the only subject in v0.1). | |
| version | No | Book version: "bn" = Bangla version (default), "en" = English version. Separate books with different page numbers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and closed-world, so the safety bar is lower. The description adds real context beyond them: the searchable fields, that hits are small and carry IDs and page numbers, and the non-obvious behavior that query language determines which book version is searched by default. It does not mention empty-result behavior or pagination, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences, front-loaded with purpose and examples, then search scope plus return shape plus handoff, then the version nuance. The bilingual example strings earn their length by demonstrating the query format directly. No filler or restated field names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 return-shape burden and does so (small hits with IDs and pages). It covers scope, bilingual behavior, follow-up routing, and version defaults, and the remaining details (limit, subject defaults) live fully in the schema. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning the schema cannot: the interaction between query language and the version parameter's effective default. The bilingual query examples also clarify what the query parameter accepts in practice. The limit and subject defaults are left to the schema, which is fine.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and scope: "Find where a concept is taught," then enumerates exactly what is searched (chapter titles, section headings, learning objectives). It also names what it returns (small hits with IDs and pages) and routes detail lookups to get_topic, so an agent can distinguish it from list_chapters and get_objectives without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the use case clearly (locating where a concept is taught) and gives an explicit follow-up path: "call get_topic on an ID for details." It also explains the version defaulting rule with a conditional ("unless version is set"). It stops short of stating when NOT to use it (e.g., browsing all chapters, which is what list_chapters is for), so it is clear but not fully exclusionary.
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.
5 tool updates
v0.1.0- First observed
get_exercises - First observed
get_objectives - First observed
get_topic - First observed
list_chapters - First observed
search_curriculum
TDQS
Scored across 5 tools
Each tool has a fairly distinct role: list_chapters browses, search_curriculum finds by keyword, and the three get_* tools fetch different item types. The only blur is that get_topic can also resolve an objective/exercise ID while get_objectives and get_exercises list those items for a chapter, so an agent may hesitate over which to call for an objective.
All five tools follow a clean snake_case verb_noun pattern (list_chapters, search_curriculum, get_topic, get_objectives, get_exercises) with verbs chosen consistently for list/search/detail semantics.
Five tools is well-scoped for a single-textbook curriculum lookup server, and each has a clear job in the browse-search-detail workflow with no redundant entries.
The surface covers navigation, search, objectives and exercises, but there is no way to retrieve actual textbook or question text, and search only indexes chapter titles, headings and objectives, so exercise and worked-example content is unreachable except by reading a PDF page externally. No tool lists available subjects/versions either, an obvious gap if the catalog grows beyond v0.1 Physics.
Maintenance
Related MCP Connectors
Access and search Branch's official API documentation directly within any AI agent or client.
Docs Q&A: search 169 data and AI guides, fetch any page as markdown. Read-only, keyless.
Merge, split, extract, rotate, reorder and stamp PDF pages from your AI chat, all offline.
Merge, split, extract, rotate, reorder and stamp PDF pages from your AI chat, all offline.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables natural language interaction with e-books, extracting metadata, table of contents, and chapter content from EPUB and PDF files.396Apache 2.0
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to query and validate BNCC (Brazilian curriculum) skills deterministically, preventing hallucinations by providing official data, search, and code validation tools.-
- AlicenseNot gradedqualityDmaintenanceEnables natural language interaction with e-books, supporting EPUB and PDF formats. Provides APIs for metadata extraction, table of contents, and content retrieval for AI-powered reading and learning.Apache 2.0
- FlicenseNot gradedqualityDmaintenanceAn MCP server that turns the entire NCERT/CBSE curriculum into queryable infrastructure, enabling semantic search, RAG explanations, question generation, and curriculum mapping for grades 1–12.1-