Learn Python by building glowing math patterns: lessons, scripts, quiz checks and concepts.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
For a quiz question of a lesson: says whether the answer is right, which option is, and why. For an exercise: gives its hint and its reference answer to compare the learner’s attempt with (this server does not grade free text and never runs code); offer the hint first and the reference only after a try.
A quiz question or an exercise
Its number in the lesson, from 1
The pattern (its slug), as list_patterns gives it
The language of the answer: en (the default), pl; es, pt, fr and de for patterns and lessons (the course stays in English there)
The learner’s answer: for the quiz the option’s text or its number (1 to 3); for an exercise optional
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http hypnotic-patterns https://hypnoticpatterns.doner.cloud/mcp
For a quiz question of a lesson: says whether the answer is right, which option is, and why. For an exercise: gives its hint and its reference answer to compare the learner’s attempt with (this server does not grade free text and never runs code); offer the hint first and the reference only after a try.
| Argument | Type | Description |
|---|---|---|
| kind* | string | A quiz question or an exercise |
| lang | string | The language of the answer: en (the default), pl; es, pt, fr and de for patterns and lessons (the course stays in English there) |
| answer | string | The learner’s answer: for the quiz the option’s text or its number (1 to 3); for an exercise optional |
| number* | integer | Its number in the lesson, from 1 |
| pattern* | string | The pattern (its slug), as list_patterns gives it |
{
"type": "object",
"required": [
"pattern",
"kind",
"number"
],
"properties": {
"kind": {
"enum": [
"quiz",
"exercise"
],
"type": "string",
"description": "A quiz question or an exercise"
},
"lang": {
"enum": [
"en",
"pl",
"es",
"pt",
"fr",
"de"
],
"type": "string",
"description": "The language of the answer: en (the default), pl; es, pt, fr and de for patterns and lessons (the course stays in English there)"
},
"answer": {
"type": "string",
"maxLength": 2000,
"description": "The learner’s answer: for the quiz the option’s text or its number (1 to 3); for an exercise optional"
},
"number": {
"type": "integer",
"minimum": 1,
"description": "Its number in the lesson, from 1"
},
"pattern": {
"enum": [
"golden-angle",
"galton-board",
"times-table",
"chaos-game",
"pendulum-wave",
"turing-patterns",
"sorting-race",
"three-body-orbits",
"spinning-ring"
],
"type": "string",
"description": "The pattern (its slug), as list_patterns gives it"
}
},
"additionalProperties": false
}Finds a Python or math idea in the lessons (e.g. "np.roll", "recursion", "golden ratio", "binomial", "leapfrog", "attractor") and gives what the lessons say about it, with the lesson and video that show it.
| Argument | Type | Description |
|---|---|---|
| lang | string | The language of the answer: en (the default), pl; es, pt, fr and de for patterns and lessons (the course stays in English there) |
| concept* | string | The idea to look up |
{
"type": "object",
"required": [
"concept"
],
"properties": {
"lang": {
"enum": [
"en",
"pl",
"es",
"pt",
"fr",
"de"
],
"type": "string",
"description": "The language of the answer: en (the default), pl; es, pt, fr and de for patterns and lessons (the course stays in English there)"
},
"concept": {
"type": "string",
"maxLength": 120,
"minLength": 2,
"description": "The idea to look up"
}
},
"additionalProperties": false
}The whole Python script of a pattern (numpy and matplotlib, under 80 lines), as the lesson and the site show it and as the site’s tests run it, with how to run it, what to change to see something new, and a Google Colab notebook to run it in a browser.
| Argument | Type | Description |
|---|---|---|
| lang | string | The language of the answer: en (the default), pl; es, pt, fr and de for patterns and lessons (the course stays in English there) |
| pattern* | string | The pattern (its slug), as list_patterns gives it |
{
"type": "object",
"required": [
"pattern"
],
"properties": {
"lang": {
"enum": [
"en",
"pl",
"es",
"pt",
"fr",
"de"
],
"type": "string",
"description": "The language of the answer: en (the default), pl; es, pt, fr and de for patterns and lessons (the course stays in English there)"
},
"pattern": {
"enum": [
"golden-angle",
"galton-board",
"times-table",
"chaos-game",
"pendulum-wave",
"turing-patterns",
"sorting-race",
"three-body-orbits",
"spinning-ring"
],
"type": "string",
"description": "The pattern (its slug), as list_patterns gives it"
}
},
"additionalProperties": false
}One lesson of the course: the question the pattern asks, why it works at three depths, the formula, its script line by line with explanations, exercises with hints, a quiz and flashcards. Exercise answers and quiz keys are left out on purpose: use check_answer once the learner has tried.
| Argument | Type | Description |
|---|---|---|
| lang | string | The language of the answer: en (the default), pl; es, pt, fr and de for patterns and lessons (the course stays in English there) |
| pattern* | string | The pattern (its slug), as list_patterns gives it |
{
"type": "object",
"required": [
"pattern"
],
"properties": {
"lang": {
"enum": [
"en",
"pl",
"es",
"pt",
"fr",
"de"
],
"type": "string",
"description": "The language of the answer: en (the default), pl; es, pt, fr and de for patterns and lessons (the course stays in English there)"
},
"pattern": {
"enum": [
"golden-angle",
"galton-board",
"times-table",
"chaos-game",
"pendulum-wave",
"turing-patterns",
"sorting-race",
"three-body-orbits",
"spinning-ring"
],
"type": "string",
"description": "The pattern (its slug), as list_patterns gives it"
}
},
"additionalProperties": false
}The free Python course in its order: each lesson builds one pattern in a short numpy/matplotlib script, from arrays and loops (Beginner) to randomness and recursion (Intermediate) to simulations and grids (Advanced). Each lesson with what it teaches and its link. Optionally only one level.
| Argument | Type | Description |
|---|---|---|
| lang | string | The language of the answer: en (the default), pl; es, pt, fr and de for patterns and lessons (the course stays in English there) |
| level | string | Only the lessons of this level |
{
"type": "object",
"properties": {
"lang": {
"enum": [
"en",
"pl",
"es",
"pt",
"fr",
"de"
],
"type": "string",
"description": "The language of the answer: en (the default), pl; es, pt, fr and de for patterns and lessons (the course stays in English there)"
},
"level": {
"enum": [
"Beginner",
"Intermediate",
"Advanced"
],
"type": "string",
"description": "Only the lessons of this level"
}
},
"additionalProperties": false
}The patterns of the channel: each one simple rule (the golden angle, the Galton board, Turing patterns…), its category, whether it has a Python lesson and at what level, with links to its page and newest video.
| Argument | Type | Description |
|---|---|---|
| lang | string | The language of the answer: en (the default), pl; es, pt, fr and de for patterns and lessons (the course stays in English there) |
{
"type": "object",
"properties": {
"lang": {
"enum": [
"en",
"pl",
"es",
"pt",
"fr",
"de"
],
"type": "string",
"description": "The language of the answer: en (the default), pl; es, pt, fr and de for patterns and lessons (the course stays in English there)"
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 6, 2026.