MCP tools reference
Udemy MCP tools
11 tools for Udemy on the Cotlet MCP server. Your agent picks them from tools/list.
- MCP server
- https://cotlet.dev/mcp/v1
- Connects with
- Your own Udemy instructor account (the account that teaches the courses)
- Integration page
- Udemy
| Endpoint | Access | Description |
|---|---|---|
| udemy_list_courses | read | Courses you teach, with status, price, students, rating and URL. |
| udemy_get_course_performance | read | Revenue, enrollments and rating for one course over a period, from the Performance dashboard. |
| udemy_get_revenue_report | read | Monthly earnings with revenue by channel (Udemy Organic, Your Promotions, Udemy Business and more), by course, refunds and tax withheld. |
| udemy_list_coupons | read | Coupons of a course with code, type, price, redemptions and expiry, plus how many you can still create this month. |
| udemy_list_reviews | read | Course reviews with rating, text, date and your response if any. |
| udemy_list_questions | read | Questions from the course Q&A with lecture, text, replies and whether it is answered. |
| udemy_create_coupon | write | New coupon for a course, within Udemy's monthly limit per course; Udemy sets each type's duration. |
| udemy_update_course_landing_page | write | Change the title, subtitle or description shown on the public course page. |
| udemy_send_announcement | write | Email enrolled students: an educational announcement or a promotional email, within the monthly limits Udemy sets per course. |
| udemy_reply_to_question | write | Post an instructor answer in the course Q&A. |
| udemy_respond_to_review | write | Public instructor response under a student review. |
List courses
readMCP tool udemy_list_courses
Returns every course on your instructor account, published and draft. Use course_id from each item as the parameter of the other endpoints. Students and rating are the numbers Udemy shows for the course.
Parameters
| Name | Type | Description |
|---|---|---|
| status | enum | published, draft or all. Default: all. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "udemy_list_courses",
"arguments": {}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"courses": [
{
"course_id": "4821736",
"title": "Python for Beginners",
"status": "published",
"price": "$54.99",
"students": 8421,
"rating": 4.6,
"url": "https://www.udemy.com/course/python-for-yourname/"
},
{
"course_id": "5102298",
"title": "Excel Pivot Tables",
"status": "draft",
"price": null,
"students": 0,
"rating": null,
"url": null
}
]
},
"isError": false
} MCP tool udemy_get_course_performance
Returns the figures the Performance dashboard shows for one course: revenue, new enrollments and average rating for the period. Use it for a weekly or monthly check on a single course.
Parameters
| Name | Type | Description |
|---|---|---|
| course_id required | string | Course ID from list_courses. |
| period | enum | 7d, 30d, 12m or all. Default: 30d. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "udemy_get_course_performance",
"arguments": {
"course_id": "course_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"course_id": "4821736",
"period": "30d",
"revenue": {
"amount": 1284.5,
"currency": "USD"
},
"enrollments": 212,
"rating": 4.6
},
"isError": false
} Get revenue report
readMCP tool udemy_get_revenue_report
Returns the monthly Revenue report: total earnings, then the split by channel and by course, with refunds and tax withheld. One month per call; the current month is partial until Udemy closes it.
Parameters
| Name | Type | Description |
|---|---|---|
| month required | string | Month as YYYY-MM. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "udemy_get_revenue_report",
"arguments": {
"month": "month"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"month": "2026-09",
"currency": "USD",
"total": 2310.4,
"by_channel": [
{
"channel": "Udemy Organic",
"amount": 1420.1
},
{
"channel": "Your Promotions",
"amount": 612.3
},
{
"channel": "Udemy Business",
"amount": 278
}
],
"by_course": [
{
"course_id": "4821736",
"title": "Python for Beginners",
"amount": 1790.2
},
{
"course_id": "5102298",
"title": "Excel Pivot Tables",
"amount": 520.2
}
],
"refunds": 41.5,
"tax_withheld": 0
},
"isError": false
} List coupons
readMCP tool udemy_list_coupons
Lists the coupons of one course, newest first, with type, price, redemptions and expiry. It also returns how many new coupons you can still create this month, because Udemy limits that number per course.
Parameters
| Name | Type | Description |
|---|---|---|
| course_id required | string | Course ID from list_courses. |
| active_only | boolean | Skip expired coupons. Default: true. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "udemy_list_coupons",
"arguments": {
"course_id": "course_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"coupons": [
{
"coupon_id": "9917000",
"code": "SEPT1499",
"type": "custom_price",
"price": "14.99",
"redemptions": 37,
"expires_at": "2026-10-05T09:00:00-07:00"
}
],
"coupons_left_this_month": 2
},
"isError": false
} List reviews
readMCP tool udemy_list_reviews
Lists reviews of one course, newest first, with rating, text, date and your response if you wrote one. Filter by star rating or unresponded_only to find what still needs an answer.
Parameters
| Name | Type | Description |
|---|---|---|
| course_id required | string | Course ID from list_courses. |
| rating | integer | Only this star rating, 1 to 5. |
| unresponded_only | boolean | Skip reviews you already responded to. |
| since | date | Only reviews from this date on. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "udemy_list_reviews",
"arguments": {
"course_id": "course_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"reviews": [
{
"review_id": "rv_33801",
"rating": 2,
"text": "Pivot tables were skipped.",
"created_at": "2026-10-02T11:20:00Z",
"response": null
}
],
"next_cursor": null
},
"isError": false
} List Q&A questions
readMCP tool udemy_list_questions
Lists questions from the course Q&A, newest first, each with its lecture, text and replies. Set unanswered_only to see questions with no instructor reply.
Parameters
| Name | Type | Description |
|---|---|---|
| course_id required | string | Course ID from list_courses. |
| unanswered_only | boolean | Only questions with no instructor reply. |
| since | date | Only questions from this date on. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "udemy_list_questions",
"arguments": {
"course_id": "course_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"questions": [
{
"question_id": "q_70418",
"lecture": "Filters in Excel",
"text": "How do I toggle filters faster?",
"created_at": "2026-10-06T08:12:00Z",
"answered": false,
"replies": []
}
],
"next_cursor": null
},
"isError": false
} MCP tool udemy_create_coupon
Creates one coupon for a course and returns its code and link. Udemy's rule is three new coupons per course per calendar month, and Udemy does not let you delete a coupon afterwards. A custom price must be inside the range Udemy offers. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| course_id required | string | Course ID from list_courses. |
| type required | enum | best_price, custom_price, free_open or free_targeted. |
| code | string | Your own coupon code. Default: generated. |
| price | string | For custom_price: an amount inside the range Udemy offers, e.g. 12.99. |
| starts_at | datetime | Activation time, ISO 8601 with time zone, inside the current calendar month in U.S. Pacific Time. Default: now. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "udemy_create_coupon",
"arguments": {
"course_id": "4821736",
"type": "custom_price",
"code": "OCTOBER1299",
"price": "12.99",
"starts_at": "2026-10-12T09:00:00-07:00"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"coupon_id": "9917342",
"course_id": "4821736",
"code": "OCTOBER1299",
"type": "custom_price",
"price": "12.99",
"currency": "USD",
"starts_at": "2026-10-12T09:00:00-07:00",
"expires_at": "2026-11-12T09:00:00-08:00",
"url": "https://www.udemy.com/course/python-for-yourname/?couponCode=OCTOBER1299",
"coupons_left_this_month": 2
},
"isError": false
} MCP tool udemy_update_course_landing_page
Changes the title, subtitle or description of the public course page. Only the fields you pass change. Udemy may review changes to a published course before they show. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| course_id required | string | Course ID from list_courses. |
| fields required | object | Any of title, subtitle, description_markdown. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "udemy_update_course_landing_page",
"arguments": {
"course_id": "course_8c41d2",
"fields": "fields"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"course_id": "4821736",
"status": "saved",
"updated": [
"subtitle"
]
},
"isError": false
} MCP tool udemy_send_announcement
Sends one message to the students enrolled in a course. Udemy's rules allow 4 educational announcements and 2 promotional emails per course per month, and promotional emails may not contain external links. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| course_id required | string | Course ID from list_courses. |
| kind required | enum | educational or promotional. |
| subject required | string | Email subject. |
| body_markdown required | string | Message body. Udemy's announcement rules apply. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "udemy_send_announcement",
"arguments": {
"course_id": "4821736",
"kind": "educational",
"subject": "New lecture: React Server Components",
"body_markdown": "Section 6 now has a lecture on Server Components, with a short exercise at the end."
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"announcement_id": "an_2204",
"course_id": "4821736",
"kind": "educational",
"status": "sent",
"sent_at": "2026-10-12T10:00:00-04:00"
},
"isError": false
} MCP tool udemy_reply_to_question
Posts an answer under your instructor name in the course Q&A, visible to every student of the course. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| question_id required | string | Question ID from list_questions. |
| body required | string | Answer text. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "udemy_reply_to_question",
"arguments": {
"question_id": "question_8c41d2",
"body": "body"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"question_id": "q_70418",
"reply_id": "rp_9081",
"status": "published"
},
"isError": false
} MCP tool udemy_respond_to_review
Posts a public response under one student review, as you. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| review_id required | string | Review ID from list_reviews. |
| body required | string | Response text. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "udemy_respond_to_review",
"arguments": {
"review_id": "rv_33801",
"body": "Thanks for pointing this out. Pivot tables now have their own section, starting at lecture 14."
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"review_id": "rv_33801",
"status": "published"
},
"isError": false
}