Koskamo

Bettyapp MCP

An official read-only MCP server that allows AI tutors to find specific moments in university and school lectures where a topic is explained, providing play addresses and metadata to direct students to the exact part of a video.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Bettyapp MCP logo, by BettyappVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Bettyapp
You need:Get a developer keyType your email address and what the key is for, and click Email me a key
MCP endpoint (Streamable HTTP)
https://bettyapp.org/mcp
Vendor documentation

What you can do with it

  • Find lecture moments explaining a specific topic
  • Retrieve full lecture details and moments by ID
  • List available subjects and educational levels
  • Get the best moment for a topic at each level

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
bettyapp 1.1.0
MCP protocol
2025-06-18
Tools
6 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Bettyapp finds the moments in university and school lectures where a topic is explained. When a student asks about a topic or a question that a lecture could help with, call search_moments with their words. Give the student the play_url of the best one or two moments, with the lecture title, the teacher and the credit line (credit.line). Link only moments a tool returned: never make up a Bettyapp address. When no moments come back, Bettyapp has no lecture on it: say so. get_topic gives the best moment at each Level, get_lecture every moment of one lecture, list_subjects the subject and level values. Use: linking students to moments; no bulk download; no training of AI models on the answers.

Tools

6 advertised

search_moments — Find lecture moments that explain a topic or question
Advertised by the server during the last successful anonymous check.
Advertised read-only

Find the moments in Bettyapp's university and school lectures that explain a topic or answer a student's question. Use it when a student asks about a topic, or is stuck on a question, and a short part of a real lecture would help. Each moment has a play_url that opens the lecture at that moment: give the student the best one or two, with the lecture title, teacher and credit line. The moments come best first. If none come back, Bettyapp has no lecture on it: do not say that it has.

search_moments input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "level": {
      "type": "string",
      "description": "Only lectures at this Level: a code from list_subjects' levels (high_school, university_year1 ...) or its name. Leave it out for every Level."
    },
    "limit": {
      "type": "integer",
      "default": 5,
      "maximum": 10,
      "minimum": 1,
      "description": "How many moments, 1 to 10."
    },
    "query": {
      "type": "string",
      "maxLength": 300,
      "minLength": 1,
      "description": "The topic or the student's question, in plain words, for example \"why does ice float\" or \"integration by parts\"."
    },
    "subject": {
      "type": "string",
      "description": "Only lectures in this Subject: a name from list_subjects (for example Chemistry). Leave it out to search every Subject."
    }
  },
  "additionalProperties": false
}
search_moments output schema
{
  "type": "object",
  "required": [
    "attribution",
    "terms",
    "query",
    "moments"
  ],
  "properties": {
    "level": {
      "type": [
        "string",
        "null"
      ],
      "description": "The Level searched at."
    },
    "query": {
      "type": [
        "string",
        "null"
      ],
      "description": "The words searched for, as sent."
    },
    "terms": {
      "type": [
        "string",
        "null"
      ],
      "description": "The terms of use."
    },
    "message": {
      "type": [
        "string",
        "null"
      ],
      "description": "Said when there are no moments."
    },
    "moments": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "start_seconds",
          "end_seconds",
          "time",
          "title",
          "summary",
          "questions",
          "topics",
          "excerpt",
          "play_url",
          "thumbnail_url",
          "credit"
        ],
        "properties": {
          "time": {
            "type": [
              "string",
              "null"
            ],
            "description": "start_seconds as a clock (4:33)."
          },
          "title": {
            "type": [
              "string",
              "null"
            ],
            "description": "What it explains, in a few words (written with the help of an AI model and checked against the lecture)."
          },
          "credit": {
            "type": [
              "object",
              "null"
            ],
            "required": [
              "line",
              "creator",
              "licence",
              "transcript"
            ],
            "properties": {
              "line": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The credit line, as the lecture page shows it."
              },
              "creator": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Who made the lecture."
              },
              "licence": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The licence, for example CC BY-NC-SA 4.0."
              },
              "transcript": {
                "enum": [
                  "full",
                  "short excerpts only"
                ],
                "type": [
                  "string",
                  "null"
                ],
                "description": "Whether the lecture page may show the whole transcript, or only short excerpts."
              },
              "creator_url": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The creator's own site."
              },
              "licence_url": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The licence's text."
              },
              "watch_at_source": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The lecture at its own source (YouTube, the publisher)."
              }
            },
            "description": "Who made the lecture and its licence. Show line wherever the moment is linked."
          },
          "topics": {
            "type": "array",
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "description": "The topics explained there, most mentioned first."
          },
          "excerpt": {
            "type": [
              "string",
              "null"
            ],
            "description": "The teacher's words at its start: at most 300 characters, and as short as the lecture's licence asks (at most 40 words for lectures whose licence allows only short excerpts)."
          },
          "lecture": {
            "type": "object",
            "required": [
              "id",
              "title",
              "url",
              "course",
              "teacher",
              "subjects"
            ],
            "properties": {
              "id": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "The lecture's id."
              },
              "of": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Lectures in its course with pages."
              },
              "url": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Its page on Bettyapp."
              },
              "title": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Its title."
              },
              "course": {
                "type": "object",
                "required": [
                  "id",
                  "name",
                  "url"
                ],
                "properties": {
                  "id": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "url": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "number": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Its place in its course."
              },
              "teacher": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The course's teacher or publisher."
              },
              "subjects": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "subject",
                    "levels"
                  ],
                  "properties": {
                    "levels": {
                      "type": "array",
                      "items": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "subject": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                },
                "description": "Its Subjects, each with its Levels."
              },
              "length_seconds": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "How long it is."
              }
            }
          },
          "summary": {
            "type": [
              "string",
              "null"
            ],
            "description": "One or two sentences on what it explains (as title)."
          },
          "play_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "The lecture page, playing from this moment. Send the student here."
          },
          "questions": {
            "type": "array",
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "description": "Questions a student might ask that it answers (as title)."
          },
          "also_called": {
            "type": "array",
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "description": "Other names for its topic."
          },
          "end_seconds": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Where its part of the lecture ends."
          },
          "start_seconds": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Where it starts, in seconds from the lecture's start."
          },
          "thumbnail_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "A picture of the lecture at about this moment."
          }
        },
        "description": "A moment of a lecture: where it starts and ends, what it explains, and where to play it."
      },
      "description": "The moments, best first. Empty: Bettyapp has nothing on it."
    },
    "subject": {
      "type": [
        "string",
        "null"
      ],
      "description": "The Subject searched in."
    },
    "attribution": {
      "type": [
        "string",
        "null"
      ],
      "description": "How to credit Bettyapp and the lecture's creator. Follow it."
    },
    "searched_for": {
      "type": [
        "string",
        "null"
      ],
      "description": "The words searched for when a misspelt word was corrected."
    }
  }
}
search_moments annotations
{
  "title": "Find lecture moments",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_lecture — A lecture and all its moments
Advertised by the server during the last successful anonymous check.
Advertised read-only

One lecture on Bettyapp, by its id (lecture.id in a moment) or the address of its page: its course, teacher, Subjects and Levels, credit line, and every moment in it, in order, each with its play_url. Use it to give a student more of a lecture a moment came from, or to read a Bettyapp lecture link the student sent.

get_lecture input schema
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Or the lecture page's address (https://bettyapp.org/lectures/...)."
    },
    "lecture_id": {
      "type": "integer",
      "minimum": 1,
      "description": "The lecture's id."
    }
  },
  "additionalProperties": false
}
get_lecture output schema
{
  "type": "object",
  "required": [
    "attribution",
    "terms",
    "lecture",
    "moments"
  ],
  "properties": {
    "terms": {
      "type": [
        "string",
        "null"
      ],
      "description": "The terms of use."
    },
    "lecture": {
      "allOf": [
        {
          "type": "object",
          "required": [
            "id",
            "title",
            "url",
            "course",
            "teacher",
            "subjects"
          ],
          "properties": {
            "id": {
              "type": [
                "integer",
                "null"
              ],
              "description": "The lecture's id."
            },
            "of": {
              "type": [
                "integer",
                "null"
              ],
              "description": "Lectures in its course with pages."
            },
            "url": {
              "type": [
                "string",
                "null"
              ],
              "description": "Its page on Bettyapp."
            },
            "title": {
              "type": [
                "string",
                "null"
              ],
              "description": "Its title."
            },
            "course": {
              "type": "object",
              "required": [
                "id",
                "name",
                "url"
              ],
              "properties": {
                "id": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "url": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            },
            "number": {
              "type": [
                "integer",
                "null"
              ],
              "description": "Its place in its course."
            },
            "teacher": {
              "type": [
                "string",
                "null"
              ],
              "description": "The course's teacher or publisher."
            },
            "subjects": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "subject",
                  "levels"
                ],
                "properties": {
                  "levels": {
                    "type": "array",
                    "items": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  },
                  "subject": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "description": "Its Subjects, each with its Levels."
            },
            "length_seconds": {
              "type": [
                "integer",
                "null"
              ],
              "description": "How long it is."
            }
          }
        },
        {
          "type": "object",
          "properties": {
            "credit": {
              "type": [
                "object",
                "null"
              ],
              "required": [
                "line",
                "creator",
                "licence",
                "transcript"
              ],
              "properties": {
                "line": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "The credit line, as the lecture page shows it."
                },
                "creator": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Who made the lecture."
                },
                "licence": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "The licence, for example CC BY-NC-SA 4.0."
                },
                "transcript": {
                  "enum": [
                    "full",
                    "short excerpts only"
                  ],
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Whether the lecture page may show the whole transcript, or only short excerpts."
                },
                "creator_url": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "The creator's own site."
                },
                "licence_url": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "The licence's text."
                },
                "watch_at_source": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "The lecture at its own source (YouTube, the publisher)."
                }
              },
              "description": "Who made the lecture and its licence. Show line wherever the moment is linked."
            }
          }
        }
      ]
    },
    "moments": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "start_seconds",
          "end_seconds",
          "time",
          "title",
          "summary",
          "questions",
          "topics",
          "excerpt",
          "play_url",
          "thumbnail_url",
          "credit"
        ],
        "properties": {
          "time": {
            "type": [
              "string",
              "null"
            ],
            "description": "start_seconds as a clock (4:33)."
          },
          "title": {
            "type": [
              "string",
              "null"
            ],
            "description": "What it explains, in a few words (written with the help of an AI model and checked against the lecture)."
          },
          "credit": {
            "type": [
              "object",
              "null"
            ],
            "required": [
              "line",
              "creator",
              "licence",
              "transcript"
            ],
            "properties": {
              "line": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The credit line, as the lecture page shows it."
              },
              "creator": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Who made the lecture."
              },
              "licence": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The licence, for example CC BY-NC-SA 4.0."
              },
              "transcript": {
                "enum": [
                  "full",
                  "short excerpts only"
                ],
                "type": [
                  "string",
                  "null"
                ],
                "description": "Whether the lecture page may show the whole transcript, or only short excerpts."
              },
              "creator_url": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The creator's own site."
              },
              "licence_url": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The licence's text."
              },
              "watch_at_source": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The lecture at its own source (YouTube, the publisher)."
              }
            },
            "description": "Who made the lecture and its licence. Show line wherever the moment is linked."
          },
          "topics": {
            "type": "array",
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "description": "The topics explained there, most mentioned first."
          },
          "excerpt": {
            "type": [
              "string",
              "null"
            ],
            "description": "The teacher's words at its start: at most 300 characters, and as short as the lecture's licence asks (at most 40 words for lectures whose licence allows only short excerpts)."
          },
          "lecture": {
            "type": "object",
            "required": [
              "id",
              "title",
              "url",
              "course",
              "teacher",
              "subjects"
            ],
            "properties": {
              "id": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "The lecture's id."
              },
              "of": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Lectures in its course with pages."
              },
              "url": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Its page on Bettyapp."
              },
              "title": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Its title."
              },
              "course": {
                "type": "object",
                "required": [
                  "id",
                  "name",
                  "url"
                ],
                "properties": {
                  "id": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "url": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "number": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Its place in its course."
              },
              "teacher": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The course's teacher or publisher."
              },
              "subjects": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "subject",
                    "levels"
                  ],
                  "properties": {
                    "levels": {
                      "type": "array",
                      "items": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "subject": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                },
                "description": "Its Subjects, each with its Levels."
              },
              "length_seconds": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "How long it is."
              }
            }
          },
          "summary": {
            "type": [
              "string",
              "null"
            ],
            "description": "One or two sentences on what it explains (as title)."
          },
          "play_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "The lecture page, playing from this moment. Send the student here."
          },
          "questions": {
            "type": "array",
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "description": "Questions a student might ask that it answers (as title)."
          },
          "also_called": {
            "type": "array",
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "description": "Other names for its topic."
          },
          "end_seconds": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Where its part of the lecture ends."
          },
          "start_seconds": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Where it starts, in seconds from the lecture's start."
          },
          "thumbnail_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "A picture of the lecture at about this moment."
          }
        },
        "description": "A moment of a lecture: where it starts and ends, what it explains, and where to play it."
      },
      "description": "Its moments in order (without lecture: it is the one above)."
    },
    "attribution": {
      "type": [
        "string",
        "null"
      ],
      "description": "How to credit Bettyapp and the lecture's creator. Follow it."
    }
  }
}
get_lecture annotations
{
  "title": "Get a lecture",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_topic — The best moment at each Level for a topic
Advertised by the server during the last successful anonymous check.
Advertised read-only

A topic (photosynthesis, chain rule, supply and demand): the best moment on Bettyapp that explains it at each Level, from school to university, then a few more and related topics. Use it to give a student an explanation at their level, or an easier or a harder one. If Bettyapp has no page for the topic, try search_moments.

get_topic input schema
{
  "type": "object",
  "required": [
    "topic"
  ],
  "properties": {
    "topic": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "The topic, in plain words."
    }
  },
  "additionalProperties": false
}
get_topic output schema
{
  "type": "object",
  "required": [
    "attribution",
    "terms",
    "topic",
    "levels",
    "more"
  ],
  "properties": {
    "more": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "start_seconds",
          "end_seconds",
          "time",
          "title",
          "summary",
          "questions",
          "topics",
          "excerpt",
          "play_url",
          "thumbnail_url",
          "credit"
        ],
        "properties": {
          "time": {
            "type": [
              "string",
              "null"
            ],
            "description": "start_seconds as a clock (4:33)."
          },
          "title": {
            "type": [
              "string",
              "null"
            ],
            "description": "What it explains, in a few words (written with the help of an AI model and checked against the lecture)."
          },
          "credit": {
            "type": [
              "object",
              "null"
            ],
            "required": [
              "line",
              "creator",
              "licence",
              "transcript"
            ],
            "properties": {
              "line": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The credit line, as the lecture page shows it."
              },
              "creator": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Who made the lecture."
              },
              "licence": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The licence, for example CC BY-NC-SA 4.0."
              },
              "transcript": {
                "enum": [
                  "full",
                  "short excerpts only"
                ],
                "type": [
                  "string",
                  "null"
                ],
                "description": "Whether the lecture page may show the whole transcript, or only short excerpts."
              },
              "creator_url": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The creator's own site."
              },
              "licence_url": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The licence's text."
              },
              "watch_at_source": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The lecture at its own source (YouTube, the publisher)."
              }
            },
            "description": "Who made the lecture and its licence. Show line wherever the moment is linked."
          },
          "topics": {
            "type": "array",
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "description": "The topics explained there, most mentioned first."
          },
          "excerpt": {
            "type": [
              "string",
              "null"
            ],
            "description": "The teacher's words at its start: at most 300 characters, and as short as the lecture's licence asks (at most 40 words for lectures whose licence allows only short excerpts)."
          },
          "lecture": {
            "type": "object",
            "required": [
              "id",
              "title",
              "url",
              "course",
              "teacher",
              "subjects"
            ],
            "properties": {
              "id": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "The lecture's id."
              },
              "of": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Lectures in its course with pages."
              },
              "url": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Its page on Bettyapp."
              },
              "title": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Its title."
              },
              "course": {
                "type": "object",
                "required": [
                  "id",
                  "name",
                  "url"
                ],
                "properties": {
                  "id": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "url": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "name": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "number": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Its place in its course."
              },
              "teacher": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The course's teacher or publisher."
              },
              "subjects": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "subject",
                    "levels"
                  ],
                  "properties": {
                    "levels": {
                      "type": "array",
                      "items": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "subject": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                },
                "description": "Its Subjects, each with its Levels."
              },
              "length_seconds": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "How long it is."
              }
            }
          },
          "summary": {
            "type": [
              "string",
              "null"
            ],
            "description": "One or two sentences on what it explains (as title)."
          },
          "play_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "The lecture page, playing from this moment. Send the student here."
          },
          "questions": {
            "type": "array",
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "description": "Questions a student might ask that it answers (as title)."
          },
          "also_called": {
            "type": "array",
            "items": {
              "type": [
                "string",
                "null"
              ]
            },
            "description": "Other names for its topic."
          },
          "end_seconds": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Where its part of the lecture ends."
          },
          "start_seconds": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Where it starts, in seconds from the lecture's start."
          },
          "thumbnail_url": {
            "type": [
              "string",
              "null"
            ],
            "description": "A picture of the lecture at about this moment."
          }
        },
        "description": "A moment of a lecture: where it starts and ends, what it explains, and where to play it."
      },
      "description": "More moments that explain it."
    },
    "terms": {
      "type": [
        "string",
        "null"
      ],
      "description": "The terms of use."
    },
    "topic": {
      "type": "object",
      "required": [
        "name",
        "url"
      ],
      "properties": {
        "url": {
          "type": [
            "string",
            "null"
          ]
        },
        "name": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "levels": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "level",
          "moment"
        ],
        "properties": {
          "level": {
            "type": [
              "string",
              "null"
            ]
          },
          "moment": {
            "type": "object",
            "required": [
              "start_seconds",
              "end_seconds",
              "time",
              "title",
              "summary",
              "questions",
              "topics",
              "excerpt",
              "play_url",
              "thumbnail_url",
              "credit"
            ],
            "properties": {
              "time": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "start_seconds as a clock (4:33)."
              },
              "title": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "What it explains, in a few words (written with the help of an AI model and checked against the lecture)."
              },
              "credit": {
                "type": [
                  "object",
                  "null"
                ],
                "required": [
                  "line",
                  "creator",
                  "licence",
                  "transcript"
                ],
                "properties": {
                  "line": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "The credit line, as the lecture page shows it."
                  },
                  "creator": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Who made the lecture."
                  },
                  "licence": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "The licence, for example CC BY-NC-SA 4.0."
                  },
                  "transcript": {
                    "enum": [
                      "full",
                      "short excerpts only"
                    ],
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Whether the lecture page may show the whole transcript, or only short excerpts."
                  },
                  "creator_url": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "The creator's own site."
                  },
                  "licence_url": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "The licence's text."
                  },
                  "watch_at_source": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "The lecture at its own source (YouTube, the publisher)."
                  }
                },
                "description": "Who made the lecture and its licence. Show line wherever the moment is linked."
              },
              "topics": {
                "type": "array",
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "description": "The topics explained there, most mentioned first."
              },
              "excerpt": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The teacher's words at its start: at most 300 characters, and as short as the lecture's licence asks (at most 40 words for lectures whose licence allows only short excerpts)."
              },
              "lecture": {
                "type": "object",
                "required": [
                  "id",
                  "title",
                  "url",
                  "course",
                  "teacher",
                  "subjects"
                ],
                "properties": {
                  "id": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "The lecture's id."
                  },
                  "of": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Lectures in its course with pages."
                  },
                  "url": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Its page on Bettyapp."
                  },
                  "title": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Its title."
                  },
                  "course": {
                    "type": "object",
                    "required": [
                      "id",
                      "name",
                      "url"
                    ],
                    "properties": {
                      "id": {
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "url": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    }
                  },
                  "number": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Its place in its course."
                  },
                  "teacher": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "The course's teacher or publisher."
                  },
                  "subjects": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "required": [
                        "subject",
                        "levels"
                      ],
                      "properties": {
                        "levels": {
                          "type": "array",
                          "items": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        },
                        "subject": {
                          "type": [
                            "string",
                            "null"
                          ]
                        }
                      }
                    },
                    "description": "Its Subjects, each with its Levels."
                  },
                  "length_seconds": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "How long it is."
                  }
                }
              },
              "summary": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "One or two sentences on what it explains (as title)."
              },
              "play_url": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The lecture page, playing from this moment. Send the student here."
              },
              "questions": {
                "type": "array",
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "description": "Questions a student might ask that it answers (as title)."
              },
              "also_called": {
                "type": "array",
                "items": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "description": "Other names for its topic."
              },
              "end_seconds": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Where its part of the lecture ends."
              },
              "start_seconds": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Where it starts, in seconds from the lecture's start."
              },
              "thumbnail_url": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "A picture of the lecture at about this moment."
              }
            },
            "description": "A moment of a lecture: where it starts and ends, what it explains, and where to play it."
          }
        }
      },
      "description": "The best moment at each Level, lowest Level first."
    },
    "attribution": {
      "type": [
        "string",
        "null"
      ],
      "description": "How to credit Bettyapp and the lecture's creator. Follow it."
    },
    "related_topics": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "url"
        ],
        "properties": {
          "url": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "description": "Topics related to it."
    }
  }
}
get_topic annotations
{
  "title": "Get a topic",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_subjects — The Subjects and Levels
Advertised by the server during the last successful anonymous check.
Advertised read-only

Every Subject with lectures on Bettyapp, each with its Levels and how many lectures it has, and the Level ladder from Elementary to Graduate & Professional. Use it to find the subject and level values for search_moments, or to tell a student what Bettyapp covers.

list_subjects input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
list_subjects output schema
{
  "type": "object",
  "required": [
    "attribution",
    "terms",
    "subjects",
    "levels"
  ],
  "properties": {
    "terms": {
      "type": [
        "string",
        "null"
      ],
      "description": "The terms of use."
    },
    "levels": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "code",
          "name",
          "lectures"
        ],
        "properties": {
          "code": {
            "type": [
              "string",
              "null"
            ]
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "lectures": {
            "type": [
              "integer",
              "null"
            ]
          }
        }
      }
    },
    "subjects": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "slug",
          "lectures",
          "levels"
        ],
        "properties": {
          "url": {
            "type": [
              "string",
              "null"
            ],
            "description": "The Subject's page, where it has one."
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "slug": {
            "type": [
              "string",
              "null"
            ]
          },
          "levels": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "name",
                "code",
                "lectures"
              ],
              "properties": {
                "url": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "code": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "lectures": {
                  "type": [
                    "integer",
                    "null"
                  ]
                }
              }
            }
          },
          "courses": {
            "type": [
              "integer",
              "null"
            ]
          },
          "lectures": {
            "type": [
              "integer",
              "null"
            ]
          }
        }
      }
    },
    "attribution": {
      "type": [
        "string",
        "null"
      ],
      "description": "How to credit Bettyapp and the lecture's creator. Follow it."
    }
  }
}
list_subjects annotations
{
  "title": "List Subjects and Levels",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search — Search Bettyapp's lecture moments
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search Bettyapp's university and school lectures for the moments that explain a topic or question. Returns results, best first, each with an id for fetch, a title and the url that opens the lecture at that moment. For a student, search_moments gives more (the summary, teacher and credit line). No results: Bettyapp has no lecture on it.

search input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "maxLength": 300,
      "minLength": 1,
      "description": "The topic or question, in plain words."
    }
  },
  "additionalProperties": false
}
search output schema
{
  "type": "object",
  "required": [
    "results"
  ],
  "properties": {
    "results": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "title",
          "url"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The moment, for fetch: \"<lecture id>@<second>\"."
          },
          "url": {
            "type": "string",
            "description": "The lecture page, playing from this moment."
          },
          "title": {
            "type": "string",
            "description": "What the moment explains, its lecture and where it starts."
          }
        }
      },
      "description": "The moments, best first. Empty: Bettyapp has no lecture on it."
    }
  }
}
search annotations
{
  "title": "Search lecture moments",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
fetch — One lecture moment in full
Advertised by the server during the last successful anonymous check.
Advertised read-only

One result of search by its id ("<lecture id>@<second>"), or a lecture by its id or the address of its page: the moment's title, summary, the questions it answers and the teacher's words at its start, its lecture and credit line, and the url that plays from it.

fetch input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 500,
      "minLength": 1,
      "description": "A search result's id, a lecture's id, or a Bettyapp lecture address."
    }
  },
  "additionalProperties": false
}
fetch output schema
{
  "type": "object",
  "required": [
    "id",
    "title",
    "text",
    "url"
  ],
  "properties": {
    "id": {
      "type": "string"
    },
    "url": {
      "type": "string",
      "description": "The lecture page, playing from the moment."
    },
    "text": {
      "type": "string",
      "description": "The moment (or the lecture and its moments) in words, with the credit line."
    },
    "title": {
      "type": "string"
    },
    "metadata": {
      "type": "object",
      "additionalProperties": {
        "type": [
          "string",
          "null"
        ]
      }
    }
  }
}
fetch annotations
{
  "title": "Fetch a lecture moment",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
880 ms
95th percentile latency
880 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 880 ms · metadata changed · 6 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http bettyapp-mcp https://bettyapp.org/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add bettyapp-mcp --url https://bettyapp.org/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable bettyapp-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "bettyapp-mcp": {
      "url": "https://bettyapp.org/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "bettyapp-mcp": {
      "type": "streamableHttp",
      "url": "https://bettyapp.org/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start bettyapp-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "bettyapp-mcp": {
      "type": "http",
      "url": "https://bettyapp.org/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http bettyapp-mcp https://bettyapp.org/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "bettyapp-mcp": {
      "url": "https://bettyapp.org/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "bettyapp-mcp": {
      "serverUrl": "https://bettyapp.org/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Bettyapp MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Bettyapp MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing