Skip to main content
Glama

Alexandre Caramaschi: cursos e aulas de GEO em português

Vídeo-aulas e podcasts de um módulo

getModuleMedia
Read-onlyIdempotent

Use for a chapter's video lesson or podcast, or the moment where something is said. Returns the media of a course or module: each file (kind, title, description, src, duration, credit, chapter markers with links) and the transcript cue by cue, with seconds, mm:ss, file id and a URL that opens the player there. The transcript is AI synthetic speech from the chapter text (label): cite it with moment and link, never as the author's words. Long transcripts are paged: pass nextCursor back as cursor until null. Files without transcript are in withoutTranscript. Errors: course_not_found, module_not_found, course_content_unavailable.

Input Schema

NameRequiredDescriptionDefault
slugYesCourse slug as returned by listCourses, e.g. 'gsc-avancado'.
cursorNonextCursor of a previous partial response with the same slug and module; omit to start.
moduleNoOptional module id or ASCII slug; omit for every video and podcast of the course.
maxCharsNoOptional transcript size per response in characters, 2000 to 40000 as a string (default 40000).

Output Schema

NameRequiredDescriptionDefault
labelYes
courseYes
moduleYes
revisionYes
mediaCountYes
mediaFilesYes
transcriptYes
contentTrustYes
schemaVersionYes
withoutTranscriptYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed25 schema fields changed
    • changedInput schema / properties / cursor / description
      Previous value: -"nextCursor from a previous partial response with the same slug and module. Omit to start from the first cue."New value: +"nextCursor of a previous partial response with the same slug and module; omit to start."
    • changedInput schema / properties / maxChars / description
      Previous value: -"Optional transcript budget per response in characters, integer from 2000 to 40000 as a string (default 40000)."New value: +"Optional transcript size per response in characters, 2000 to 40000 as a string (default 40000)."
    • changedInput schema / properties / module / description
      Previous value: -"Optional module id or ASCII slug from getCourseModules; omit to get every video lesson and podcast of the course."New value: +"Optional module id or ASCII slug; omit for every video and podcast of the course."
    • changedInput schema / properties / slug / description
      Previous value: -"Course slug exactly as returned by listCourses, e.g. 'gsc-avancado'."New value: +"Course slug as returned by listCourses, e.g. 'gsc-avancado'."
    • removedOutput schema / properties / mediaCount / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / mediaFiles / items / properties / duration / anyOf
      Removed value: -[
      -  {
      -    "pattern": "^(\\d+:)?\\d{2}:\\d{2}$",
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / mediaFiles / items / properties / duration / pattern
      Added value: +"^(\\d+:)?\\d{2}:\\d{2}$"
    • addedOutput schema / properties / mediaFiles / items / properties / duration / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / mediaFiles / items / properties / durationSeconds / anyOf
      Removed value: -[
      -  {
      -    "minimum": 0,
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / mediaFiles / items / properties / durationSeconds / minimum
      Added value: +0
    • addedOutput schema / properties / mediaFiles / items / properties / durationSeconds / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / mediaFiles / items / properties / module / properties / order / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / mediaFiles / items / properties / transcript / properties / chars / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / mediaFiles / items / properties / transcript / properties / cues / maximum
      Removed value: -9007199254740991
    • addedOutput schema / properties / module / additionalProperties
      Added value: +false
    • removedOutput schema / properties / module / anyOf
      Removed value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      },
      -      "order": {
      -        "exclusiveMinimum": 0,
      -        "maximum": 9007199254740991,
      -        "type": "integer"
      -      },
      -      "slug": {
      -        "type": "string"
      -      },
      -      "title": {
      -        "type": "string"
      -      },
      -      "url": {
      -        "format": "uri",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "slug",
      -      "order",
      -      "title",
      -      "url"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / module / properties
      Added value: +{
      +  "id": {
      +    "type": "string"
      +  },
      +  "order": {
      +    "exclusiveMinimum": 0,
      +    "type": "integer"
      +  },
      +  "slug": {
      +    "type": "string"
      +  },
      +  "title": {
      +    "type": "string"
      +  },
      +  "url": {
      +    "format": "uri",
      +    "type": "string"
      +  }
      +}
    • addedOutput schema / properties / module / required
      Added value: +[
      +  "id",
      +  "slug",
      +  "order",
      +  "title",
      +  "url"
      +]
    • addedOutput schema / properties / module / type
      Added value: +[
      +  "object",
      +  "null"
      +]
    • removedOutput schema / properties / transcript / properties / range / properties / end / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / transcript / properties / range / properties / start / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / transcript / properties / totalCues / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / withoutTranscript / items / properties / kind / anyOf
      Removed value: -[
      -  {
      -    "enum": [
      -      "video",
      -      "audio"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / withoutTranscript / items / properties / kind / enum
      Added value: +[
      +  "video",
      +  "audio",
      +  null
      +]
    • addedOutput schema / properties / withoutTranscript / items / properties / kind / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  2. Added

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already cover the safe-read profile, and the description adds genuinely new behavioral context: the transcript is AI synthetic speech that must be cited with moment and link, never as the author's words; paged responses require cursor round-tripping; untranscribed files are segregated; and three specific error codes are enumerated. This is well beyond the annotation payload.

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-loads the purpose, then layers return shape, citation caveat, pagination, and errors in descending priority. Dense and largely waste-free, though the return-shape sentence is a long run-on that could be split for scannability.

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 values needn't be spelled out, yet the description still supplies the operational context an agent needs: paging contract, the withoutTranscript bucket, citation constraints on synthetic speech, and the named error codes. Nothing material is left for the agent to infer before calling.

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 already 100%, so baseline is 3, but the description adds relational meaning the schema cannot: cursor is the nextCursor of a prior call that must match the same slug and module, and maxChars governs transcript size per response. Defaults and ranges live in the schema, so it does not fully duplicate them.

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

Purpose4/5

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

States a specific resource and scope: 'Returns the media of a course or module' with an itemized breakdown (files with kind, title, src, duration, chapter markers) plus a cue-by-cue transcript. The granularity ('a chapter's video lesson or podcast, or the moment where something is said') naturally separates it from sibling getModuleContent, but no sibling is named explicitly, which is what a 5 requires.

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

Usage Guidelines4/5

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

Opens with an explicit use case ('Use for a chapter's video lesson or podcast, or the moment where something is said') and gives concrete operational conditions for resuming pagination ('pass nextCursor back as cursor until null') plus a note that untranscribed files land in withoutTranscript. It never states when NOT to use it or names an alternative sibling for the same data.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources