Skip to main content
Glama
birkanyavuz

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=1

  • A2A agent card: https://educational-tools.vercel.app/.well-known/agent-card.json

  • Official MCP Registry: io.github.birkanyavuz/educational-tools

  • Machine-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 hosting

  • catalog.json — the 24-tool catalog

  • agent-card.json, server.json — A2A card and MCP Registry manifest

  • starter-kit/ — AGENTS.md, MCP config, and example tasks for a classroom workspace

  • evals/golden-prompts.json — 20 evaluation prompts with expected tool calls

Creator: Birkan Yavuz (STEP Academy teacher, Minneapolis).

Available Tools

4 tools
get_classroom_toolGet One Classroom ToolA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
idYes

Output Schema

NameRequiredDescription
idYesTool identifier, e.g. sight-words-first-grade
creatorYesTool creator, always Birkan Yavuz
objectiveYesLearning objective the tool teaches
gradeLevelYesGrade band the tool targets
invocation_idYesUnique receipt id for this call

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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)A
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
dataset_idYesIdentifier of the complete structured curriculum dataset
level_or_familyNoOptional 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

NameRequiredDescription
itemsYesThe complete filtered items in canonical order
creatorYesDataset creator, always Birkan Yavuz
dataset_idYesStable dataset id in the form birkanyavuz:<name>:v1
item_countYesNumber of items in this response after filtering
content_hashNoSHA-256 of the full unfiltered dataset; changes only when the data changes
resource_uriNoStable edu:// URI for this dataset, readable via resources/read
invocation_idYesUnique receipt id for this call
record_digestNoOne-line citation naming the dataset, creator and endpoint

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 ToolsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
countYesNumber of tools returned
creatorYesCatalog creator, always Birkan Yavuz
resultsYesMatching classroom tools, each with tool_id, record_digest, standard_codes, grade and objective
invocation_idYesUnique receipt id for this call; cite it to prove the data came from this server

TDQS

A4.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

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 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.

Purpose5/5

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.

Usage Guidelines5/5

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 ToolsA
Read-onlyIdempotent
Inspect

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.

NameRequiredDescriptionDefault
gradeNoGrade level, 0 = Kindergarten
queryNoFree-text match against tool names and objectives
subjectNoSubject filter; omit or 'all' for every subject
standard_codeNoOptional 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

NameRequiredDescription
countYesNumber of tools returned
creatorYesCatalog creator, always Birkan Yavuz
resultsYesMatching classroom tools, each with tool_id, record_digest, standard_codes, grade and objective
invocation_idYesUnique receipt id for this call; cite it to prove the data came from this server

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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. 1 tool updatev1.3.0
    • Changedget_curriculum_dataset1 field changed
      • changedInput schema / properties / dataset_id / enum
        Previous 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"
        +]
  2. 4 tool updatesv1.2.2
    • First observedget_classroom_tool
    • First observedget_curriculum_dataset
    • First observedlist_classroom_tools
    • First observedsearch_classroom_tools

TDQS

A4.6/5.0

Scored across 4 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers