Model Context Protocol

Your AI agent, making course videos

The CourseSmith MCP server gives Claude, Cursor, VS Code Copilot, and Windsurf 17 tools over the public API: create lessons, generate lectures, edit storyboard scenes, and render narrated MP4s — conversationally. It uses your API key, and the developer API is part of the Pro, Studio and Enterprise plans.

1 · Get the server

The server is a single Python file that ships in our public examples repo. It talks only to https://api.coursesmith.ai and your key never leaves your machine — it goes into the client's env block, not into any config we host.

install
git clone https://github.com/propfuturesbot/coursesmith-api-examples.git
pip install "mcp[cli]" httpx
# server file: coursesmith-api-examples/mcp/coursesmith_mcp.py

2 · Connect your client

Use the absolute path to coursesmith_mcp.py and a Python that has the mcp package installed. Restart the client after editing its config.

Claude Codeone terminal command
bash
claude mcp add coursesmith \
  -e COURSESMITH_API_KEY=cs_live_... \
  -- python /abs/path/coursesmith-api-examples/mcp/coursesmith_mcp.py

Then ask Claude to make a video — the tools appear automatically.

Claude Desktopclaude_desktop_config.json (Settings → Developer → Edit Config)
json
{
  "mcpServers": {
    "coursesmith": {
      "command": "python",
      "args": ["/abs/path/coursesmith-api-examples/mcp/coursesmith_mcp.py"],
      "env": { "COURSESMITH_API_KEY": "cs_live_..." }
    }
  }
}
Cursor~/.cursor/mcp.json — or .cursor/mcp.json per project
json
{
  "mcpServers": {
    "coursesmith": {
      "command": "python",
      "args": ["/abs/path/coursesmith-api-examples/mcp/coursesmith_mcp.py"],
      "env": { "COURSESMITH_API_KEY": "cs_live_..." }
    }
  }
}
VS Code (Copilot agent mode).vscode/mcp.json in your workspace
json
{
  "servers": {
    "coursesmith": {
      "type": "stdio",
      "command": "python",
      "args": ["/abs/path/coursesmith-api-examples/mcp/coursesmith_mcp.py"],
      "env": { "COURSESMITH_API_KEY": "cs_live_..." }
    }
  }
}

VS Code uses "servers" with an explicit "type": "stdio".

Windsurf~/.codeium/windsurf/mcp_config.json
json
{
  "mcpServers": {
    "coursesmith": {
      "command": "python",
      "args": ["/abs/path/coursesmith-api-examples/mcp/coursesmith_mcp.py"],
      "env": { "COURSESMITH_API_KEY": "cs_live_..." }
    }
  }
}
No MCP? Use the Claude skill

The repo also ships a ready-made skill at skills/coursesmith-video/ — copy the folder into ~/.claude/skills/ and Claude Code drives the REST API directly with curl, no server process needed.

3 · Just ask

“Make me a 3-minute video that explains binary search trees, then give me the download link.”
“Ingest https://en.wikipedia.org/wiki/B-tree, split it into lessons, and render the first one.”
“Open the storyboard for that lesson and rewrite scene 2 in a chalkboard style.”
“How much of my plan is left this month, and what would a 1080p render use?”

Long renders outlive a single tool call — agents poll with wait_for_job (bounded at 120 s per call) and keep going. Generation and render calls are idempotent, so a retried tool call never double-charges.

The 17 tools

Discover
  • list_options — Formats, lengths, tones, resolutions — never hardcode enums
  • list_voices — Built-in, premium, and your cloned voices
  • get_credits — Balance check before spending
Build the course
  • list_courses — Your courses, paginated
  • get_course — Full tree: topics → lessons
  • create_course — Empty course shell
  • create_lesson — One-call standalone lesson — the unit videos hang off
Ground in sources
  • ingest_source — URL, raw text, YouTube, or GitHub repo
  • process_source — LLM split into concepts + proposed lectures
  • commit_source — Turn the split into grounded lessons
Generate & edit
  • generate_lecture — Script generation across every format family
  • get_storyboard — Compact scene-by-scene view of the script
  • update_scene — edit | rewrite | remap — one tool, three modes
  • add_scene — LLM-authored scene from a description
  • delete_scene — Remove a scene
Render & wait
  • render_video — The whole pipeline: TTS → timeline → MP4
  • wait_for_job — Bounded long-poll on any job id

Rather call the API directly?

Everything the agent does is plain REST — the examples repo has runnable scripts for the same flows, and the reference documents every endpoint.