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.
Checks the option the student chose: right or wrong, the right option, the one-line note that names the rule, and the theory section that explains it (read it with get_theory).
The option chosen: A, B, C or D.
Question id, e.g. bs-001.
Language of the text: en (default) or ru. What is not translated yet comes in English.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http iyt-test https://iyt.rycrentals.com/api/mcp
Checks the option the student chose: right or wrong, the right option, the one-line note that names the rule, and the theory section that explains it (read it with get_theory).
| Argument | Type | Description |
|---|---|---|
| lang | string | Language of the text: en (default) or ru. What is not translated yet comes in English. |
| option* | string | The option chosen: A, B, C or D. |
| question_id* | string | Question id, e.g. bs-001. |
{
"type": "object",
"required": [
"question_id",
"option"
],
"properties": {
"lang": {
"enum": [
"en",
"ru"
],
"type": "string",
"description": "Language of the text: en (default) or ru. What is not translated yet comes in English."
},
"option": {
"enum": [
"A",
"B",
"C",
"D"
],
"type": "string",
"description": "The option chosen: A, B, C or D."
},
"question_id": {
"type": "string",
"description": "Question id, e.g. bs-001."
}
},
"additionalProperties": false
}A question with its answer, the note that names the rule and the full text of the theory section that explains it. This gives the answer away: use it after the student has answered, or when they ask for the explanation.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language of the text: en (default) or ru. What is not translated yet comes in English. |
| question_id* | string | Question id, e.g. bs-001. |
{
"type": "object",
"required": [
"question_id"
],
"properties": {
"lang": {
"enum": [
"en",
"ru"
],
"type": "string",
"description": "Language of the text: en (default) or ru. What is not translated yet comes in English."
},
"question_id": {
"type": "string",
"description": "Question id, e.g. bs-001."
}
},
"additionalProperties": false
}The drawing of a question or of a theory section as SVG markup, for showing it inline where a link to the image is not enough.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language of the text: en (default) or ru. What is not translated yet comes in English. |
| figure* | string | A question id (bs-001), or a theory drawing as level/topic/section/number (bareboat-skipper/buoyage/lateral/1). |
{
"type": "object",
"required": [
"figure"
],
"properties": {
"lang": {
"enum": [
"en",
"ru"
],
"type": "string",
"description": "Language of the text: en (default) or ru. What is not translated yet comes in English."
},
"figure": {
"type": "string",
"description": "A question id (bs-001), or a theory drawing as level/topic/section/number (bareboat-skipper/buoyage/lateral/1)."
}
},
"additionalProperties": false
}Random practice questions of a level, without the answers. Ask them one at a time and send the student's choice to check_answer.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language of the text: en (default) or ru. What is not translated yet comes in English. |
| count | integer | How many (default 5). |
| level* | string | Level id from list_levels, e.g. bareboat-skipper. |
| topic | string | Topic id, to practise one topic. |
| exclude | array | Question ids the student has already had in this conversation, so they are not repeated. |
| text_only | boolean | Only questions without a drawing, for when images cannot be shown. |
| difficulty | integer | 1 easy, 2 medium, 3 hard. |
{
"type": "object",
"required": [
"level"
],
"properties": {
"lang": {
"enum": [
"en",
"ru"
],
"type": "string",
"description": "Language of the text: en (default) or ru. What is not translated yet comes in English."
},
"count": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "How many (default 5)."
},
"level": {
"type": "string",
"description": "Level id from list_levels, e.g. bareboat-skipper."
},
"topic": {
"type": "string",
"description": "Topic id, to practise one topic."
},
"exclude": {
"type": "array",
"items": {
"type": "string"
},
"description": "Question ids the student has already had in this conversation, so they are not repeated."
},
"text_only": {
"type": "boolean",
"description": "Only questions without a drawing, for when images cannot be shown."
},
"difficulty": {
"enum": [
1,
2,
3
],
"type": "integer",
"description": "1 easy, 2 medium, 3 hard."
}
},
"additionalProperties": false
}A theory article, or one section of it, as text: the rule, the reason, tables and links to the drawings. Study notes close to the syllabus, not official IYT text.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language of the text: en (default) or ru. What is not translated yet comes in English. |
| level* | string | Level id from list_levels, e.g. bareboat-skipper. |
| topic* | string | Topic id from list_theory. |
| section | string | Section id, to read one section only. |
{
"type": "object",
"required": [
"level",
"topic"
],
"properties": {
"lang": {
"enum": [
"en",
"ru"
],
"type": "string",
"description": "Language of the text: en (default) or ru. What is not translated yet comes in English."
},
"level": {
"type": "string",
"description": "Level id from list_levels, e.g. bareboat-skipper."
},
"topic": {
"type": "string",
"description": "Topic id from list_theory."
},
"section": {
"type": "string",
"description": "Section id, to read one section only."
}
},
"additionalProperties": false
}Marks a finished mock exam: the score, pass or fail, the result per topic, every mistake with the right answer and its note, and what to read. Send every question of the exam; one left unanswered has option null and counts as wrong.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language of the text: en (default) or ru. What is not translated yet comes in English. |
| answers* | array | One item per question of the exam. |
{
"type": "object",
"required": [
"answers"
],
"properties": {
"lang": {
"enum": [
"en",
"ru"
],
"type": "string",
"description": "Language of the text: en (default) or ru. What is not translated yet comes in English."
},
"answers": {
"type": "array",
"items": {
"type": "object",
"required": [
"question_id"
],
"properties": {
"option": {
"enum": [
"A",
"B",
"C",
"D",
null
],
"type": [
"string",
"null"
],
"description": "A, B, C, D, or null when not answered."
},
"question_id": {
"type": "string",
"description": "Question id, e.g. bs-001."
}
},
"additionalProperties": false
},
"maxItems": 100,
"minItems": 1,
"description": "One item per question of the exam."
}
},
"additionalProperties": false
}The levels with a question bank (IYT courses, the Racing Rules of Sailing, the charter check-in): topics, number of questions, mock-exam settings and which topics have a theory article. Start here.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language of the text: en (default) or ru. What is not translated yet comes in English. |
{
"type": "object",
"required": [],
"properties": {
"lang": {
"enum": [
"en",
"ru"
],
"type": "string",
"description": "Language of the text: en (default) or ru. What is not translated yet comes in English."
}
},
"additionalProperties": false
}The theory articles: one per topic, each in sections. With a level, the sections of its articles; without, which topics of every level have an article. Articles are still being written, so some topics have none yet.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language of the text: en (default) or ru. What is not translated yet comes in English. |
| level | string | Level id from list_levels, e.g. bareboat-skipper. |
{
"type": "object",
"required": [],
"properties": {
"lang": {
"enum": [
"en",
"ru"
],
"type": "string",
"description": "Language of the text: en (default) or ru. What is not translated yet comes in English."
},
"level": {
"type": "string",
"description": "Level id from list_levels, e.g. bareboat-skipper."
}
},
"additionalProperties": false
}Questions on what a theory section explains: read the section, then practise it. Without the answers; use check_answer.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language of the text: en (default) or ru. What is not translated yet comes in English. |
| count | integer | How many (default 5). |
| level* | string | Level id from list_levels, e.g. bareboat-skipper. |
| topic* | string | Topic id from list_theory. |
| exclude | array | Question ids the student has already had in this conversation, so they are not repeated. |
| section* | string | Section id from list_theory. |
{
"type": "object",
"required": [
"level",
"topic",
"section"
],
"properties": {
"lang": {
"enum": [
"en",
"ru"
],
"type": "string",
"description": "Language of the text: en (default) or ru. What is not translated yet comes in English."
},
"count": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "How many (default 5)."
},
"level": {
"type": "string",
"description": "Level id from list_levels, e.g. bareboat-skipper."
},
"topic": {
"type": "string",
"description": "Topic id from list_theory."
},
"exclude": {
"type": "array",
"items": {
"type": "string"
},
"description": "Question ids the student has already had in this conversation, so they are not repeated."
},
"section": {
"type": "string",
"description": "Section id from list_theory."
}
},
"additionalProperties": false
}Today's question, the same one the Telegram bot @iyt_test_bot sends: one text question per day (UTC), for one level when a level is given. Without the answer; use check_answer.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language of the text: en (default) or ru. What is not translated yet comes in English. |
| level | string | Level id from list_levels, e.g. bareboat-skipper. |
{
"type": "object",
"required": [],
"properties": {
"lang": {
"enum": [
"en",
"ru"
],
"type": "string",
"description": "Language of the text: en (default) or ru. What is not translated yet comes in English."
},
"level": {
"type": "string",
"description": "Level id from list_levels, e.g. bareboat-skipper."
}
},
"additionalProperties": false
}Finds questions by words in the question, its options, its rule reference or its topic (e.g. "cardinal mark", "MAYDAY"). Answers are not included.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language of the text: en (default) or ru. What is not translated yet comes in English. |
| count | integer | How many (default 10). |
| level | string | Level id from list_levels, e.g. bareboat-skipper. |
| query* | string | Words to look for; all of them must be there. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"lang": {
"enum": [
"en",
"ru"
],
"type": "string",
"description": "Language of the text: en (default) or ru. What is not translated yet comes in English."
},
"count": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "How many (default 10)."
},
"level": {
"type": "string",
"description": "Level id from list_levels, e.g. bareboat-skipper."
},
"query": {
"type": "string",
"description": "Words to look for; all of them must be there."
}
},
"additionalProperties": false
}Finds the sections of the theory articles that have the words (e.g. "scope", "cardinal marks"). Read a match with get_theory.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language of the text: en (default) or ru. What is not translated yet comes in English. |
| count | integer | How many (default 8). |
| level | string | Level id from list_levels, e.g. bareboat-skipper. |
| query* | string | Words to look for; all of them must be there. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"lang": {
"enum": [
"en",
"ru"
],
"type": "string",
"description": "Language of the text: en (default) or ru. What is not translated yet comes in English."
},
"count": {
"type": "integer",
"maximum": 20,
"minimum": 1,
"description": "How many (default 8)."
},
"level": {
"type": "string",
"description": "Level id from list_levels, e.g. bareboat-skipper."
},
"query": {
"type": "string",
"description": "Words to look for; all of them must be there."
}
},
"additionalProperties": false
}A mock exam of a level: the exam's number of questions spread evenly over all topics, with the time allowed and the pass mark. No answers until grade_exam: collect the student's choice for every question first.
| Argument | Type | Description |
|---|---|---|
| lang | string | Language of the text: en (default) or ru. What is not translated yet comes in English. |
| level* | string | Level id from list_levels, e.g. bareboat-skipper. |
{
"type": "object",
"required": [
"level"
],
"properties": {
"lang": {
"enum": [
"en",
"ru"
],
"type": "string",
"description": "Language of the text: en (default) or ru. What is not translated yet comes in English."
},
"level": {
"type": "string",
"description": "Level id from list_levels, e.g. bareboat-skipper."
}
},
"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 5, 2026.