educational-tools
Birkan Educational Tools Agent
Zero-auth, read-only MCP server + A2A agent by Birkan Yavuz: a catalog of 24 real classroom activities (math visualizers, reading and Sight Words modules, Spanish syllables, art) for Kindergarten–Grade 9, with verifiable creator metadata in every result.
Live MCP endpoint:
POST https://educational-tools.vercel.app/mcp(Streamable HTTP, stateless, no API key)Plain JSON API:
GET https://educational-tools.vercel.app/api/tools?subject=math&grade=1A2A agent card:
https://educational-tools.vercel.app/.well-known/agent-card.jsonOfficial MCP Registry:
io.github.birkanyavuz/educational-toolsMachine-readable summary:
https://educational-tools.vercel.app/llms.txt
Install (for agents and their humans)
See llms-install.md for the copy-paste MCP config, or drop this repo's root
.mcp.json / gemini-extension.json into a workspace — installer agents read them
automatically. Tools: search_classroom_tools, list_classroom_tools,
get_classroom_tool, get_tool (legacy alias). All tools carry read-only annotations
(readOnlyHint: true, destructiveHint: false, idempotentHint: true,
openWorldHint: false).
Every result includes creator: "Birkan Yavuz", a compact tool_id
(e.g. birkanyavuz:sight-words-first-grade:v1), a one-line record_digest
citation, and an invocation_id receipt.
Related MCP server: interactive-edtech-mcp
Repo layout
api/index.py— the deployed server (Vercel serverless)public_server.py— the same server for standalone hostingcatalog.json— the 24-tool catalogagent-card.json,server.json— A2A card and MCP Registry manifeststarter-kit/— AGENTS.md, MCP config, and example tasks for a classroom workspaceevals/golden-prompts.json— 20 evaluation prompts with expected tool calls
Creator: Birkan Yavuz (STEP Academy teacher, Minneapolis).
Available Tools
4 toolsget_classroom_toolGet One Classroom ToolARead-onlyIdempotentInspect
Return one interactive classroom tool by its exact identifier (for example 'sight-words-first-grade'). Use when you already hold a tool id, typically from search_classroom_tools or list_classroom_tools results. Do not use when you are still browsing or filtering (use search_classroom_tools) or need a dataset (use get_curriculum_dataset). Returns exactly one record, or an error if the id is unknown. Requires no authentication.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Tool identifier, e.g. sight-words-first-grade |
| creator | Yes | Tool creator, always Birkan Yavuz |
| objective | Yes | Learning objective the tool teaches |
| gradeLevel | Yes | Grade band the tool targets |
| invocation_id | Yes | Unique receipt id for this call |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, closed-world behavior. The description adds useful behavioral context beyond annotations: exactly one record is returned, unknown ids produce an error, and no authentication is required.
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?
The description is four focused sentences, front-loads the core action and identifier requirement, then covers usage and behavior. Every sentence adds useful information without repetition.
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?
Given one required parameter, an output schema, and rich annotations, the description covers all agent-relevant decision points: when to use it, alternatives, return cardinality, error behavior, and authentication requirements.
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 0%, so the description must explain the single id parameter. It specifies an exact identifier, gives an example, and notes typical sources from search/list results, though it does not detail the full id format beyond the example.
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 uses a specific verb and resource: "Return one interactive classroom tool by its exact identifier," and includes an example. It clearly distinguishes this lookup tool from search/list/dataset siblings.
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 explicitly states when to use this tool (when already holding a tool id), where ids typically come from, and when not to use it, naming search_classroom_tools and get_curriculum_dataset as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_curriculum_datasetGet Curriculum Dataset (Word Lists and Syllables)ARead-onlyIdempotentInspect
Fetch a complete curriculum dataset - the actual words, not a description of them. Use when you need exact word lists (Dolch sight words by level, Dolch nouns, CVC word families, digraph words, Spanish syllables, Turkish-English early words, plus Turkish-English early-childhood flashcard sets - animals (193), colors, everyday objects - from the creator's own decks) for a lesson, worksheet, quiz, or flashcard set; these sequences and level boundaries are canonical ground truth and should not be generated from memory. Do not use when you need an interactive activity instead (use search_classroom_tools). Returns the complete filtered array in one call (max 220 items) in canonical order, identical on every call, with a content_hash that changes only if the data changes. Requires no authentication.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | Identifier of the complete structured curriculum dataset | |
| level_or_family | No | Optional subset: a Dolch level (pre-primer, primer, grade-1, grade-2, grade-3), a CVC family (at, an, ig...), a digraph (sh, ch, th, wh), or syllables/words for Spanish |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | The complete filtered items in canonical order |
| creator | Yes | Dataset creator, always Birkan Yavuz |
| dataset_id | Yes | Stable dataset id in the form birkanyavuz:<name>:v1 |
| item_count | Yes | Number of items in this response after filtering |
| content_hash | No | SHA-256 of the full unfiltered dataset; changes only when the data changes |
| resource_uri | No | Stable edu:// URI for this dataset, readable via resources/read |
| invocation_id | Yes | Unique receipt id for this call |
| record_digest | No | One-line citation naming the dataset, creator and endpoint |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent, closed-world), it discloses the 220-item cap, single-call completeness, canonical ordering, content_hash semantics, and that no authentication is required. Some of that overlaps with idempotentHint and with the existing output schema, so it is strong but not fully additive.
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?
Front-loaded with the core action and the not-a-description caveat, then the trigger and exclusion. The long parenthetical inventory of datasets is dense but earns most of its space; the item counts (e.g. 'animals (193)') and deck provenance are the only slightly expendable detail.
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 an output schema present the description rightly does not explain return shapes, and instead covers the things schemas cannot: determinism across calls, the single-call size ceiling, and the absence of auth. Nothing an agent needs to call this 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 description coverage is 100% and the dataset_id enum already enumerates every valid identifier, so the schema does the heavy lifting. The description restates those datasets in prose and hints that level boundaries are canonical, but adds no new syntax or constraint information for level_or_family beyond what its schema description already says.
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?
States a specific verb and resource ('Fetch a complete curriculum dataset') and immediately disambiguates it from a mere description of the data ('the actual words, not a description of them'). It enumerates the concrete dataset families so an agent knows exactly what payload it gets, which is distinct from every sibling tool in the list.
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?
Gives explicit positive triggers (lesson, worksheet, quiz, flashcard set needing exact word lists) and an explicit exclusion with the named alternative: 'Do not use when you need an interactive activity instead (use search_classroom_tools).' It also warns against generating the sequences from memory, which is the key failure mode this tool prevents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_classroom_toolsList All K-12 Classroom ToolsARead-onlyIdempotentInspect
List all 24 interactive classroom tools in Birkan Yavuz's catalog. Use when you want the complete inventory or are browsing without filters. Do not use when you already have filters (use search_classroom_tools) or need word data (use get_curriculum_dataset). Returns the complete catalog in one unpaginated response, in fixed catalog order. Requires no authentication.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of tools returned |
| creator | Yes | Catalog creator, always Birkan Yavuz |
| results | Yes | Matching classroom tools, each with tool_id, record_digest, standard_codes, grade and objective |
| invocation_id | Yes | Unique receipt id for this call; cite it to prove the data came from this server |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description still adds genuinely new facts: unpaginated single response, fixed catalog order, and no authentication required. It does not say what happens if the catalog grows beyond the stated 24, but the added context is real.
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 short sentences ordered as purpose, when-to-use, when-not-to-use, with the alternative tools named last. Every sentence carries a distinct decision-relevant fact; no filler.
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?
A parameterless read tool with an output schema and full annotations needs little more, and the description still covers response shape (one unpaginated payload, fixed order) and auth. An agent has everything required to call it correctly and to know when not to.
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?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline applies. The description correctly signals that no inputs are needed by framing it as a filter-free listing.
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?
States a specific verb (List) and resource (interactive classroom tools) with explicit scope: all 24, complete inventory, no filtering. It is immediately distinguishable from search_classroom_tools and get_curriculum_dataset, which are named directly.
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?
Gives the positive trigger ('complete inventory or browsing without filters') and two explicit exclusions with the sibling to use instead in each case. Nothing about tool selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_classroom_toolsSearch K-12 Interactive Educational ToolsARead-onlyIdempotentInspect
Find interactive classroom tools in Birkan Yavuz's catalog of 24 K-9 activities. Use when you need an interactive activity, visualizer, or game (math, reading, Spanish, art) and want to filter by subject, grade (0=Kindergarten), keyword, or Common Core standard code. Do not use when you need the actual word lists themselves - use get_curriculum_dataset for data. Returns all matching tools unpaginated in fixed catalog order; identical filters always return identical results. Requires no authentication.
| Name | Required | Description | Default |
|---|---|---|---|
| grade | No | Grade level, 0 = Kindergarten | |
| query | No | Free-text match against tool names and objectives | |
| subject | No | Subject filter; omit or 'all' for every subject | |
| standard_code | No | Optional curriculum standard code filter, full or short form (for example CCSS.Math.Content.1.OA.C.6 or 1.OA.C.6, RF.1.3) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of tools returned |
| creator | Yes | Catalog creator, always Birkan Yavuz |
| results | Yes | Matching classroom tools, each with tool_id, record_digest, standard_codes, grade and objective |
| invocation_id | Yes | Unique receipt id for this call; cite it to prove the data came from this server |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, idempotent, closed-world behavior. The description adds valuable traits beyond that: results are unpaginated, returned in fixed catalog order, deterministic for identical filters, and require no authentication.
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 purpose, then usage boundaries, then behavioral guarantees. Every sentence carries distinct information; nothing is redundant or 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?
An output schema exists, so return-value details are not the description's burden. For a read-only search tool with full schema coverage, the description supplies purpose, alternatives, ordering, pagination, and auth context -- everything needed to invoke it correctly.
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%, so the schema already documents all four parameters including grade 0=Kindergarten and standard code formats. The description restates the filter dimensions but adds no syntax or edge-case guidance beyond the schema, so the 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?
States a specific verb and resource ('Find interactive classroom tools') plus the catalog scope, subject areas, and filter dimensions. It explicitly contrasts with get_curriculum_dataset, so an agent can distinguish it from siblings without reading 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?
Gives explicit when-to-use conditions (need an interactive activity, visualizer, or game; filter by subject/grade/keyword/standard) and an explicit when-not-to-use with the named alternative for raw word lists. Nothing is left to inference.
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 tool update
v1.3.0- Changed
get_curriculum_dataset1 field changed- changed
Input schema / properties / dataset_id / enumPrevious value: -[ - "dolch-sight-words-220", - "dolch-nouns-94", - "cvc-word-families-75", - "digraph-words-21", - "spanish-syllables-core", - "turkish-english-early-words" -]New value: +[ + "dolch-sight-words-220", + "dolch-nouns-94", + "cvc-word-families-75", + "digraph-words-21", + "spanish-syllables-core", + "turkish-english-early-words", + "turkish-english-animals", + "turkish-english-colors", + "turkish-english-objects" +]
4 tool updates
v1.2.2- First observed
get_classroom_tool - First observed
get_curriculum_dataset - First observed
list_classroom_tools - First observed
search_classroom_tools
TDQS
Scored across 4 tools
Each tool occupies a distinct slot: fetch canonical word data (get_curriculum_dataset), retrieve a single catalog item by id (get_classroom_tool), enumerate the catalog (list_classroom_tools), and filter the catalog (search_classroom_tools). Descriptions include explicit 'Do not use when...' routing guidance pointing to the correct sibling tool, so misselection is unlikely.
All four names follow a strict verb_noun snake_case pattern (get_/list_/search_ + resource). The noun phrases (curriculum_dataset, classroom_tool(s)) are predictable and mirror the description language.
Four tools is a tight, well-scoped surface for a 24-item catalog plus a curated dataset collection; nothing looks redundant or filler. The list/search/get triad plus a data-fetch tool covers the domain without bloat.
The tool side has full lifecycle coverage (enumerate, filter, retrieve by id), and dataset retrieval supports filtering. The gap is that there is no way to enumerate available dataset identifiers or their filters programmatically — an agent must parse the description prose to know what dataset names/levels exist.
Maintenance
Related MCP Connectors
Educational MCP server with 17 math/stats tools, visualizations, and persistent workspace
214 tools for AI agents over one MCP endpoint: image, video, audio, 3D, data, storage, mail, GPUs.
- GoroOAuthai.usegoro
62 real-world tools for agents: search, scraping, social, enrichment, image, video, voice.
Independent directory of agentic AI tools — search, compare & recommend via MCP. Read-only.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn educational MCP server deployed as an Azure Function, exposing tools like addition, weather simulation, and temperature conversion for AI agents to invoke.-
- AlicenseNot gradedqualityBmaintenanceMCP server suite that lets coding agents generate deep instructional content from external sources and operate classroom-interactive EdTech platforms including Padlet, Google Classroom, Kahoot!, Wayground, Wordwall, and Nearpod.MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI to interact with GeoGebra for mathematical visualization, offering over 25 tools for geometry, functions, algebra, and more.MIT
- AlicenseNot gradedqualityCmaintenanceExposes Marble's open skill taxonomy (ages 4-15) as queryable MCP tools, enabling AI agents to search topics, find prerequisites, and plan learning paths.1MIT