DataCamp
by DataCamp
Search DataCamp's course catalogue with no sign-in, then authenticate to run team admin and learning reports. 97 tools, 23 of them public, OAuth or bearer token.
Verified connector
Listed by Anthropic as a partner connector in its Connectors Directory.
Connection checked by Agentman on .
Anthropic states this reflects the level of review a connector received, not a security audit.
Connect DataCamp via MCP
https://mcp.datacamp.com/v1/mcpWorks in any MCP-compatible client. In Agentman Studio it is one click — no config file to edit.
DataCamp Tools & Capabilities (97)
Get a tutorial by its ID.
Get a webinar by its ID.
Get a code-along by its ID.
Get a DataCamp blog post by its ID, including its full text content, authors, category tags, and reading time.
Get a DataCamp cheat sheet by its ID, including its full text content, downloadable reference image, authors, and category tags.
Get a DataCamp podcast episode by its ID, including its transcript, hosts and guests, episode number, and links to listen on Spotify, Apple, Google, and YouTube.
List DataCamp skill assessments — short adaptive diagnostics (~15 minutes) that estimate a learner's level on a specific skill (Python, R, SQL, ...). Each entry exposes its slug, a public link, and — when the caller is authenticated — the result of their most recent completed attempt plus whether they have one in progress. Anonymous callers see only public assessments; authenticated learners also see the custom assessments their enterprise groups grant access to. Use the `assessmentId` (or `slug`) — not the version-scoped `id` — when referencing an assessment from other tools.
Get a single DataCamp skill assessment by its `slug` (e.g. `python`, `sql-fundamentals`). Returns the assessment's catalog metadata plus, when the caller is authenticated, the full history of their completed attempts. Use the `assessmentId` (or `slug`) — not the version-scoped `id` — when referencing this assessment from other tools.
List DataCamp certifications — multi-component credentials (skill assessment + practical exam ± case study) that establish a learner's professional readiness for a role. Each entry exposes a `slug` and `certificationId`, a public link, the certification's level, and the caller's `userCertification` record (external id for sharing, pass timestamps, allocation expiries) when they have passed. Scoped upstream to the public catalog plus any restricted certifications the caller's organisations grant them access to. Requires authentication.
Get a single DataCamp certification by its `slug` (e.g. `data-scientist-associate`) or numeric `certificationId`. Returns the catalog record — name, link, level, XP, and the caller's `userCertification` record when they have passed. Scoped upstream to the public catalog plus any restricted certifications the caller's organisations grant them access to. Requires authentication.
List DataCamp skill verifications — single-component assessments that certify proficiency in a specific skill or technology (e.g. AI Fundamentals, Data Literacy). Each entry exposes a `slug` and `skillVerificationId`, a public link, the `type` (`public` / `restricted` / `specialist` / `cpe` — `cpe` entries are course-backed and carry a `cpeCourse` sub-object), assessment size, and the caller's `userSkillVerification` record (latest attempt status, attempts remaining, cooldown). Scoped upstream to the public catalog plus any restricted/specialist verifications the caller's organisations grant them access to. Requires authentication.
Get a single DataCamp skill verification by its `slug` (e.g. `ai-fundamentals`, `data-literacy`) or numeric `skillVerificationId`. Returns the catalog record — name, link, type, assessment size, backing course for CPE-style verifications, and the caller's `userSkillVerification` record. Scoped upstream to the public catalog plus any restricted/specialist verifications the caller's organisations grant them access to. Requires authentication.
Get an exercise by its chapter and course IDs. When the caller is authenticated, also returns exercises in private courses the user has access to (e.g. B2B custom courses); without authentication only public courses are available.
Get course details by its ID or slug. When the caller is authenticated, also returns private courses the user has access to (e.g. B2B custom courses); without authentication only public courses are available.
List all technologies in the DataCamp catalog (e.g. Python, R, SQL). Returns each technology with its id and name. Use the ids to filter the catalog.
List all topics in the DataCamp catalog (e.g. Programming, Data Visualization, Machine Learning). Returns each topic with its id and name. Use the ids to filter the catalog.
List all industries in the DataCamp catalog (e.g. Finance, Health Care, Marketing & Sales). Returns each industry with its id and name.
List DataCamp courses with optional filters (technologies, topics, AI-native, prerequisites met, status), sort, and free-text search. When the caller is unauthenticated, only public courses are returned. When authenticated, the caller also sees private/custom courses available through their organisation. Returns a page of courses plus a `nextCursor` for pagination.
List DataCamp projects (hands-on assignments) grouped by their underlying scenario. Each group exposes its variants (e.g. Python guided, Python case study, R guided); each variant has its own `projectId`.
Get a single DataCamp project variant by its numeric `projectId`. When the caller is authenticated, the response includes their progress on this variant.
Get a DataCamp project group by its string `groupKey` — returns all underlying variants (e.g. Python guided + Python case study + R guided). When the caller is authenticated, each variant in the response includes their progress.
List DataCamp competitions — timed, dataset-driven challenges where learners explore a dataset and publish a workbook. Supports filters (status, tags, programming language, free-text search), and — when authenticated — filtering to competitions the caller has entered. Returns a page of competitions plus a `nextCursor` for pagination. When the caller is authenticated, each competition additionally carries their submission status under `userContext`.
Get a single DataCamp competition by its `slug` (e.g. `predicting-credit-card-approvals`). Returns the full brief — background, challenge, judging criteria, prizes, rules, get-started steps, hero image, and winners. When the caller is authenticated, the competition additionally carries their submission status under `userContext`.
List a page of DataCamp tracks — career tracks (multi-month learning paths to a job role) and skill tracks (focused on a single skill or tool). When the caller is unauthenticated, only public tracks are returned. When authenticated, the caller also sees custom/enterprise tracks available through their organisation. The response preserves the selected upstream order and includes navigation metadata.
Get a single DataCamp track (career or skill) by its numeric id or slug, including the full content path, prerequisites, instructors, and partnership labels. When the caller is authenticated, the response also includes their enrollment, completion, and progress on this track.
Search the DataCamp content catalog — courses, tracks, projects, tutorials, code-alongs, cheat sheets, and more — by short, broad free-text query. Prefer concise queries like "Claude Code" over long specific phrases. Optional filters: content type, technology, topic, skill level, minimum rating, duration range, launch date, and AI-native availability. Returns a ranked list of results with the same shape for every content type.
List the valid values for the dynamic `search_content` filters: content types, technologies, and topics. Call this before using the `contentTypes`, `technologies`, or `topics` filters of `search_content` and pass back exact values from the response — `search_content` rejects values that are not in this list.
Returns personalized 'what to learn next' suggestions for the authenticated user, mirroring the DataCamp home page and dashboard. Includes: the track they're enrolled in, the single best course or project to continue (their most recent unfinished one, or the next course to start in their track), spaced-repetition review items, their most urgent upcoming assignments, and suggested practice, project, and assessment content. Use this when the user asks what to do next, what to study, how to continue learning, or to recommend content. Requires an authenticated user.
Returns the authenticated user's identity and profile.
Returns the signed-in learner's own recent learning activity — the courses or tracks they have started, completed, or skipped — ordered most-recent-first. Use this to answer questions like "which course did I last progress in?", "what am I currently working on?", or "what have I completed recently?". Lists one content type per call (courses by default; pass `contentType: 'track'` for tracks). This is the learner's personal progress, not group/team reporting.
List the DataCamp groups the authenticated user belongs to. Returns each group's id, slug, and name. Call this as a discovery step to get a group's id before calling other group-related tools that require one. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Get a single DataCamp group's id, slug, and name by group id. Use this when the agent already has a group id and only needs to confirm the slug or name (e.g. for display, or to render a link). Scoped upstream to groups the authenticated user is permitted to view.
List a DataCamp group's AI credit limits and usage. Returns the group credit limit, default member limit, and a paginated member list with custom limits, effective limits, usage, and status. Limits are live configuration; usage is periodically reported and may be delayed. Requires the group's id. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Set or remove the same per-member custom AI credit limit for one or more members of a DataCamp group. Provide an explicit `action`: use `set` with a non-negative `customLimit` to create or replace the override, or `remove` to clear every selected member's override so each uses the group default limit. This changes member access to AI credits. Confirm the group, selected members, action, and limit with the user before invoking. Only group admins are authorized; member eligibility and authorization are enforced upstream. Returns the resulting custom-limit state for every member whose override changed. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Set or remove a DataCamp group's default per-user AI credit limit. Use `action: 'set'` with `defaultUserLimit` to set a manual limit, or `action: 'remove'` to remove the limit and make AI credits unlimited for group members. This changes the group setting immediately. Permissions are enforced upstream. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Create a new team inside a DataCamp group. Requires the caller to have admin or manager permissions on the group. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
List the teams within a DataCamp group. Requires the group's id. Returns each team's id, slug, and name, along with pagination metadata. Results are scoped upstream to the teams the authenticated user is permitted to see. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Add one or more existing group members to one or more teams within a DataCamp group. Requires the group's id, the target team IDs, and the user IDs to add. Permissions are enforced upstream: team managers can only add members to teams they manage, while group admins can manage all teams. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Group admin/manager view: list all assignments within a DataCamp group, or look up a single assignment by ID. This is for admins, managers, and team managers inspecting the assignments they manage across a group — it is NOT the signed-in learner's own assignments. Requires the group's id. To look up a specific assignment, pass `assignmentId` — the response is the same shape, with at most one item. Otherwise, use `scope` to choose which teams to list across: `everyone` (default) covers every accessible team, `not_in_team` covers members outside any team, and `team` scopes to a single team (requires `teamSlug`). Optionally accepts filters (type, status, creation time, and due time) and pagination. Results are scoped upstream to the assignments the authenticated user is permitted to see. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
List the assignments assigned to YOU, the signed-in learner — the courses, tracks, projects, assessments, and certifications your group/organization admins have assigned to you, with your own due dates and progress. Use this whenever someone asks about 'my assignments', 'what's assigned to me', 'what I need to do', or their own deadlines. Optionally pass `groupSlug` to scope to one group, and `sort` to order the results. This is the learner's own view, not the group-admin view of every assignment in a group. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Create an assignment in a DataCamp group for one of the supported content types (course, custom_course, chapter, xp, project, track, custom_track, assessment, certification, skill_verification). Deadline selection rule: when the request targets named, filtered, or otherwise specific users (`userIds`), a fixed calendar due date is the only supported option. Do not ask whether the user wants a fixed or rolling deadline; ask only which fixed due date to use. Offer a rolling deadline only for an assignment to the entire group or entire team. A rolling assignment requires a learner-specific rolling period and has a separate global cutoff for adding new assignees. Omit the global due date unless the user requests a different cutoff; it defaults to one year from now. Any explicit cutoff must be strictly later than the current time plus the rolling period, with sufficient processing time. Permissions are enforced upstream: the caller must be a group admin/manager, or a team manager for the target team. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Create an assignment for a single team within a DataCamp group, for one of the supported content types (course, custom_course, chapter, xp, project, track, custom_track, assessment, certification, skill_verification). The assignment is scoped to the given team, so every team member receives it unless `userIds` narrows it to specific members. Deadline selection rule: when the request targets named, filtered, or otherwise specific users (`userIds`), a fixed calendar due date is the only supported option. Do not ask whether the user wants a fixed or rolling deadline; ask only which fixed due date to use. Offer a rolling deadline only for an assignment to the entire team. A rolling assignment requires a learner-specific rolling period and has a separate global cutoff for adding new assignees. Omit the global due date unless the user requests a different cutoff; it defaults to one year from now. Any explicit cutoff must be strictly later than the current time plus the rolling period, with sufficient processing time. Permissions are enforced upstream: the caller must be a group admin/manager, or a manager of the target team. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Update an existing assignment in a DataCamp group. A rolling assignment requires a learner-specific rolling period and has a separate global cutoff for adding new assignees. Omit the global due date unless the user requests a different cutoff; it defaults to one year from now. Any explicit cutoff must be strictly later than the current time plus the rolling period, with sufficient processing time. Permissions are enforced upstream: admins and group managers can update any assignment in the group; team managers can update assignments scoped to teams they manage. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Archive a single assignment on a DataCamp group: it stops appearing in active/upcoming lists but remains available for historical reporting (queryable with `filters.status: "archived"`). Requires the assignment's `assignmentId` and the group's `groupId`. Admins and group managers can archive any assignment; team managers can archive assignments scoped to teams they manage. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Restore a previously-archived assignment in a DataCamp group back to its active state. Archived assignments can be found by listing with `filters.status: "archived"`. Requires the assignment's `assignmentId` and the group's `groupId`. Admins and group managers can unarchive any assignment; team managers can unarchive assignments scoped to teams they manage. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Permanently delete a single assignment from a DataCamp group. **This is destructive and IRREVERSIBLE** — the assignment record is removed entirely along with any historical reporting tied to it. Confirm with the user before invoking. Prefer archiving for non-destructive removal: archived assignments stop appearing as active but remain available for historical reporting and can be restored later. Requires the assignment's `assignmentId` and the group's `groupId`. Admins and group managers can delete any assignment; team managers can delete assignments scoped to teams they manage. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Remove one or more members from one or more teams within a DataCamp group. Requires the group's id, the target team IDs, and the user IDs to remove. Permissions are enforced upstream: team managers can only remove members from teams they manage, while group admins can manage all teams. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
List members of a DataCamp group, optionally scoped to a single team. Requires the group's id. Returns member details (role, Learn/DataLab access, team membership) with pagination metadata. Results are scoped to what the user is permitted to see. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Get per-product license counts for a DataCamp group — licenses in use, purchased, and available, broken down across learn and datalab (× access level: basic, classroom, enterprise, teams). Requires the group's id. Results are scoped upstream to groups the authenticated user is permitted to read. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Group admin/manager view: list the assignees of a DataCamp assignment and their progress. This is for admins, managers, and team managers tracking who an assignment was given to — it is NOT the signed-in learner's own assignments or progress. Requires the assignment's ID. Returns each assignee's identity (user id, email, name, avatar) along with their progress (status, completed_at, due_date) and assessment level where applicable. Supports pagination, sorting (by email, full name, or completion date), filtering by status, and free-text search. Results are scoped upstream to the assignees the authenticated caller is permitted to see, based on their role on the assignment's group or team. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Add one or more existing group members to an existing DataCamp group assignment. Takes the `assignmentId` and the `userIds` to add. Permissions are enforced upstream: the caller must have permission to modify the target assignment (e.g. group admins, or managers of the assignment's team). Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Invite one or more people to a DataCamp group by email. Requires the group's id. Optional: `teamIds` (numeric ids only — if the user refers to teams by name, slug, or any other identifier, resolve them to ids first), `role` (admin / manager / team_manager) for administrative invites, and per-product access levels `learnLicense` and `datalabLicense`. When a license is omitted, the tool picks the highest access level the group has available (enterprise → teams → classroom → basic), falling back to basic. Permissions are enforced upstream. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Run an Athena SQL query against the authenticated user's DataCamp group reporting dataset and return the results. Before invoking this tool, load the schema and business context — preferably by attaching the `mcp://group-reporting/schema` resource, or as a fallback by loading it via the dedicated prompt-loading tool. Results contain at most 100 rows. When `meta.isTruncated` is true, explicitly tell the user the result is partial, then narrow the request or add filters before rerunning it. Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Aggregated learner-progress report for a B2B group — completions, time spent, XP, started-content counts, and group-membership dates per user. Optionally scoped to a `startDate`/`endDate` window (both inclusive). Both bounds are optional and default to "all time" when omitted — omit them entirely unless the user explicitly specified a date range. **Never guess a date.** **This is not live data.** It is sourced from a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. The platform doesn't currently expose the exact snapshot timestamp through this endpoint. Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Filter to specific users with `userIds`; omit it to include every member of the group. Requires the group's id. Results are paginated — pass `page` and `pageSize` to navigate; check `pagination.hasNextPage` to know when to fetch the next page. Order results with `sort: { field, order }`; defaults to `{ field: "userId", order: "asc" }` for stable pagination. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Per-learner progress detail for a B2B group — one `rows` list containing courses, chapters, projects, assessments, and tracks the learner started or completed within the window, plus total XP gained and time spent. For the common completion-detail scenario, set `completedOnly` to true so `rows` contains only items completed within the window; this filter does not change the window-wide XP and time totals. Otherwise, each item appears once and can have either or both of `startedInWindow` and `completedInWindow` set. Optionally scoped to a `startDate`/`endDate` window (both inclusive). Both bounds are optional and default to "all time" when omitted — omit them entirely unless the user explicitly specified a date range. **Never guess a date.** **This is not live data.** It is sourced from a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. Use `snapshot.lastUpdatedAt` on the response to tell the user how stale the data is. When `meta.isTruncated` is true, `rows` is partial — narrow the request with `completedOnly`, `contentType`, or a smaller window to recover the missing rows. Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id and the learner's user id. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
The group's adoption score — the percentage of members who have started learning. Returns the raw `score` (0–100) plus a `benchmarkLabel` band (`caution` 0–20, `on_track` 21–84, `excellent` 85+). **This is not live data.** It is sourced from a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. The response includes `snapshot.lastUpdatedAt` so you can tell the user how stale the value is (e.g. "as of 2 hours ago"). Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Group-level engagement overview — the same widget metrics shown at the top of the Group Hub Engagement report: active users, total XP earned, hours spent on the platform, and course completions (including how many were skipped). Optionally scoped to a `startDate`/`endDate` window (both inclusive). Both bounds are optional and default to "all time" when omitted — omit them entirely unless the user explicitly specified a date range. **Never guess a date.** **This is not live data.** It is sourced from a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. The response includes `snapshot.lastUpdatedAt` so you can tell the user how stale the values are (e.g. "as of 2 hours ago"). Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Group-level project overview — the same widget metrics shown at the top of the Group Hub Content Insights > Projects report: total project starts and completions, distinct members who started/completed at least one project, and the overall completion rate. Optionally scoped to a `startDate`/`endDate` window (both inclusive). Both bounds are optional and default to "all time" when omitted — omit them entirely unless the user explicitly specified a date range. **Never guess a date.** Optional `technology` and `topic` filters narrow every metric to projects tagged with the matching attribute (case-insensitive, exact match); combine them to require both. **This is not live data.** It is sourced from a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. The response includes `snapshot.lastUpdatedAt` so you can tell the user how stale the values are (e.g. "as of 2 hours ago"). Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Group-level track overview — the same widget metrics shown at the top of the Group Hub Content Insights > Tracks report: total track starts and completions, distinct members who started/completed at least one track, and the overall completion rate. A track is a cross-discipline learning path with no `topic` or `technology` dimension, so this tool takes no content filters. Optionally scoped to a `startDate`/`endDate` window (both inclusive). Both bounds are optional and default to "all time" when omitted — omit them entirely unless the user explicitly specified a date range. **Never guess a date.** Re-enrolling in the same track within the window contributes a fresh start. **This is not live data.** It is sourced from a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. The response includes `snapshot.lastUpdatedAt` so you can tell the user how stale the values are (e.g. "as of 2 hours ago"). Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
The group's engagement score — the percentage of current members who earned XP in the last 30 days. Returns the raw `score` (0–100) plus a `benchmarkLabel` band (`caution` 0–10, `on_track` 11–49, `excellent` 50+). **This is not live data.** It is sourced from a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. The response includes `snapshot.lastUpdatedAt` so you can tell the user how stale the value is (e.g. "as of 2 hours ago"). Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Group-level course overview — the same widget metrics shown at the top of the Group Hub Content Insights > Courses report: total course starts and completions, distinct members who started/completed at least one course, courses skipped, and the overall completion rate. Optionally scoped to a `startDate`/`endDate` window (both inclusive). Both bounds are optional and default to "all time" when omitted — omit them entirely unless the user explicitly specified a date range. **Never guess a date.** Optional `technology` and `topic` filters narrow every metric to courses tagged with the matching attribute (case-insensitive, exact match); combine them to require both. **This is not live data.** It is sourced from a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. The response includes `snapshot.lastUpdatedAt` so you can tell the user how stale the values are (e.g. "as of 2 hours ago"). Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Per-technology activity for a group — XP earned, course starts/completions, and project starts/completions, broken down by content technology (Python, R, SQL, …). Optionally scoped to a `startDate`/`endDate` window (both inclusive). Both bounds are optional and default to "all time" when omitted — omit them entirely unless the user explicitly specified a date range. **Never guess a date.** **This is not live data.** Backed by a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. Use `snapshot.lastUpdatedAt` on the response to tell the user how stale the data is. Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id. Pass an optional `technology` to filter to a single bucket. Rows are sorted by `xpEarned` descending. Buckets without a technology label are omitted; buckets with zero `xpEarned` are kept (they still count starts/completions). XP attribution mirrors the Group Hub Content Insights > XP report — only `course_engagement` events contribute, so `xpEarned` matches the values shown in the UI. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Per-topic activity for a group — XP earned, course starts/completions, and project starts/completions, broken down by content topic (Programming, Machine Learning, Data Visualization, …). Optionally scoped to a `startDate`/`endDate` window (both inclusive). Both bounds are optional and default to "all time" when omitted — omit them entirely unless the user explicitly specified a date range. **Never guess a date.** **This is not live data.** Backed by a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. Use `snapshot.lastUpdatedAt` on the response to tell the user how stale the data is. Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id. Pass an optional `topic` to filter to a single bucket. Rows are sorted by `xpEarned` descending. Buckets without a topic label are omitted; buckets with zero `xpEarned` are kept (they still count starts/completions). XP attribution mirrors the Group Hub Content Insights > XP report — only `course_engagement` events contribute, so `xpEarned` matches the values shown in the UI. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Per-course activity for a group — for each course with activity in the window: starts, completions, skipped (subset of completions where the user clicked through without doing the work), completion rate, and total hours spent. Optionally scoped to a `startDate`/`endDate` window (both inclusive). Both bounds are optional and default to "all time" when omitted — omit them entirely unless the user explicitly specified a date range. **Never guess a date.** **This is not live data.** Backed by a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. Use `snapshot.lastUpdatedAt` on the response to tell the user how stale the data is. Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id. Pass an optional `courseIds` array to filter to specific courses. Pagination defaults to 20 rows per page; sort defaults to `starts` descending. Counts include events from both course variants (DataCamp and AI Tutor) aggregated under a single course row. `completionRate` is `completions / starts`, rounded to 2 decimals and capped at `1.0`; returns `1.0` when `starts` is `0`. It's a velocity metric (completions and starts may belong to different cohorts), so the cap can mask values that would otherwise exceed 1. Surface `meta.isTruncated` if set; tighten `courseIds` or shrink the date window to recover missing rows. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Per-project activity for a group — for each project with activity in the window: starts, completions, completion rate, and total hours spent. Optionally scoped to a `startDate`/`endDate` window (both inclusive). Both bounds are optional and default to "all time" when omitted — omit them entirely unless the user explicitly specified a date range. **Never guess a date.** **This is not live data.** Backed by a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. Use `snapshot.lastUpdatedAt` on the response to tell the user how stale the data is. Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id. Pass an optional `projectIds` array to filter to specific projects. Pagination defaults to 20 rows per page; sort defaults to `starts` descending. `completionRate` is `completions / starts`, rounded to 2 decimals and capped at `1.0`; returns `1.0` when `starts` is `0`. It's a velocity metric (completions and starts may belong to different cohorts), so the cap can mask values that would otherwise exceed 1. Projects do not have a topic dimension; only `technology` is surfaced. Surface `meta.isTruncated` if set; tighten `projectIds` or shrink the date window to recover missing rows. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Per-track activity for a group — for each track with a learner enrollment that started or completed in the window: starts, completions, completion rate, and total XP across the matching enrollments. Optionally scoped to a `startDate`/`endDate` window (both inclusive). Both bounds are optional and default to "all time" when omitted — omit them entirely unless the user explicitly specified a date range. **Never guess a date.** **This is not live data.** Backed by a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. Use `snapshot.lastUpdatedAt` on the response to tell the user how stale the data is. Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id. Pass an optional `trackIds` array to filter to specific tracks. Pagination defaults to 20 rows per page; sort defaults to `starts` descending. `completionRate` is `completions / starts`, rounded to 2 decimals and capped at `1.0`; returns `1.0` when `starts` is `0`. It's a velocity metric (completions and starts may belong to different cohorts), so the cap can mask values that would otherwise exceed 1. **`xpEarned` caveat:** the per-row XP on the underlying snapshot is the lifetime XP a learner has earned on that track, not a within-window slice. The number is useful as an order-of-magnitude signal across tracks but is not directly comparable to window-scoped XP totals from other tools — call this out when summarising. Tracks are cross-discipline learning paths and have no topic or technology dimension. Surface `meta.isTruncated` if set; tighten `trackIds` or shrink the date window to recover missing rows. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Per-course drill-down for a B2B group — the learners who started or completed a specific course within the window, with their start and completion timestamps. Optionally scoped to a `startDate`/`endDate` window (both inclusive). Both bounds are optional and default to "all time" when omitted — omit them entirely unless the user explicitly specified a date range. **Never guess a date.** **This is not live data.** It is sourced from a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. Use `snapshot.lastUpdatedAt` on the response to tell the user how stale the data is. Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id and the course's id. A user is included when their `startedAt` or `completedAt` falls within the window; the returned `startedAt` may predate the window when the learner started before it but completed within. Results are paginated — pass `page` and `pageSize` to navigate; check `pagination.hasNextPage` to know when to fetch the next page. Order results with `sort: { field, order }`; valid `sort.field` values are `completedAt`, `startedAt`, `email`, and `fullName` (`userId` is not selectable). Defaults to `{ field: "completedAt", order: "desc" }` so the most recent completions surface first; a stable user-id tiebreaker is always applied for paging. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Per-project drill-down for a B2B group — the learners who started or completed a specific project within the window, with their start and completion timestamps. Optionally scoped to a `startDate`/`endDate` window (both inclusive). Both bounds are optional and default to "all time" when omitted — omit them entirely unless the user explicitly specified a date range. **Never guess a date.** **This is not live data.** It is sourced from a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. Use `snapshot.lastUpdatedAt` on the response to tell the user how stale the data is. Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id and the project's id. A user is included when their `startedAt` or `completedAt` falls within the window; the returned `startedAt` may predate the window when the learner started before it but completed within. Results are paginated — pass `page` and `pageSize` to navigate; check `pagination.hasNextPage` to know when to fetch the next page. Order results with `sort: { field, order }`; defaults to `{ field: "completedAt", order: "desc" }` so the most recent completions surface first. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Per-track drill-down for a B2B group — the learners who started or completed a specific track within the window, with their start and completion timestamps. Optionally scoped to a `startDate`/`endDate` window (both inclusive). Both bounds are optional and default to "all time" when omitted — omit them entirely unless the user explicitly specified a date range. **Never guess a date.** **This is not live data.** It is sourced from a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. Use `snapshot.lastUpdatedAt` on the response to tell the user how stale the data is. Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id and the track's id. A user is included when their `startedAt` or `completedAt` falls within the window; the returned `startedAt` may predate the window when the learner started before it but completed within. Results are paginated — pass `page` and `pageSize` to navigate; check `pagination.hasNextPage` to know when to fetch the next page. Order results with `sort: { field, order }`; defaults to `{ field: "completedAt", order: "desc" }` so the most recent completions surface first. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Where a group's learners are spending their time in DataCamp Learn — the up-to-ten content items with the most engagement (each with its own `timeSpentHours`), plus a total-hours breakdown split into AI Tutor course variants vs. DataCamp (everything else: DataCamp course variants, projects, practices, assessments). Optionally scoped to a `startDate`/`endDate` window (both inclusive). Both bounds are optional and default to "all time" when omitted — omit them entirely unless the user explicitly specified a date range. **Never guess a date.** Pass an optional `contentType` (`course`, `project`, `practice`, or `assessment`) to restrict the ranking and the hours breakdown to a single type; omit it to rank courses, projects, practices, and assessments together. The top-items list never returns chapters or exercises, even when their durations are included in the overall hours. **This is not live data.** Backed by a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. Use `snapshot.lastUpdatedAt` to tell the user how stale the data is. Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id and a DataCamp subscription that includes Time in Learn reporting. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Hours a group spent in DataCamp Learn over time — one row per time bucket (`day`, `week`, or `month`) with `totalHours`, `aiTutorHours`, and `dataCampHours`. Pick this tool when the user is asking how a learning-time metric **changes over time** ("trend over the last 90 days", "by month", "weekly engagement"). Pass `bucket` matching the user's wording — daily for short windows, weekly or monthly for longer ones. The series is zero-filled across the requested window so the line chart has no missing buckets; capped at 1,000 rows, so for very long windows pick a wider `bucket`. Optionally scope to `startDate`/`endDate` (both inclusive); both default to "all time" when omitted, but in practice you should always pass an explicit window for trend questions. **Never guess a date.** Pass an optional `contentType` (`course`, `project`, `practice`, or `assessment`) to restrict to a single content type. **This is not live data.** Backed by a periodic snapshot that refreshes daily; expect data to lag by up to ~24 hours. Use `snapshot.lastUpdatedAt` to tell the user how stale the data is. Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Requires the group's id and a DataCamp subscription that includes Time in Learn reporting. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
AI Tutor Insights tool disclosures for a group, ranked by the number of learners who reported each tool. Each group row includes an all-time B2B-wide comparison when available, and `benchmarkRows` lists all-time B2B-wide rankings. The report is hidden when fewer than eight learners have disclosures. Optionally use `interval`, or a paired inclusive `from`/`to` date range from the past 24 months through today; omit all date arguments for all-time data. **This is not live data.** Use `snapshot.lastUpdatedAt` and `benchmarkSnapshot.lastUpdatedAt` to explain staleness. When `meta.isTruncated` is true, narrow the date range before relying on the rows. Only group admins can use this reporting tool. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Top AI Tutor Insights disclosure topics for each learner-profiling step in a group. Returns the top ten group topics per step with all-time B2B-wide comparisons when available, plus all-time B2B-wide ranked `benchmarkRows`. The report is hidden when fewer than eight learners have disclosures. Optionally use `interval`, or a paired inclusive `from`/`to` date range from the past 24 months through today; omit all date arguments for all-time data. **This is not live data.** Use `snapshot.lastUpdatedAt` and `benchmarkSnapshot.lastUpdatedAt` to explain staleness. When `meta.isTruncated` is true, narrow the date range before relying on the rows. Only group admins can use this reporting tool. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
AI Tutor Insights learner disclosures in their own words, balanced across task, challenge, and refinement-need steps. Each quote identifies the learner-profiling prompt it answers and its topic cluster. Use optional `page` and `pageSize` to retrieve up to 100 quotes at once. Optionally use `interval`, or a paired inclusive `from`/`to` date range from the past 24 months through today; omit all date arguments for all-time data. **This is not live data.** Use `snapshot.lastUpdatedAt` to explain staleness. When `meta.isTruncated` is true, narrow the date range before relying on the quotes. Only group admins can use this reporting tool. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Update the license tier (Learn or DataLab) for a single existing member of a DataCamp group. Requires the group's id, the member's user id, the `product` to update (`learn` or `datalab`), and the target `access` tier. Only upgrades are supported — `basic` is the free-tier baseline (no paid seat); valid upgrade targets are higher paid tiers (`teams`, `enterprise`, `classroom`). Downgrades are rejected upstream. Confirm the destination tier has available licenses first, otherwise the call will fail. Permissions are enforced upstream. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Update the role of a single existing member of a DataCamp group. Requires the group's id, the target user's id, and the new role. Permissions are enforced upstream — the caller must have permission to change this member's role. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
List pending (unclaimed) email invites for a DataCamp group. Requires the group's id. Returns invitee email, intended role, Learn/DataLab license, target teams, who sent the invite, and timestamps, with pagination metadata. Results are scoped to what the caller is permitted to see. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
List people waiting to join a DataCamp group because the group was out of licenses when they tried to join. Requires the group's id. Returns each requester's id, email, and name, with cursor-based pagination metadata and a total count. Results are scoped to what the caller is permitted to see. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Approve a single pending waitlist entry so that person joins the DataCamp group with the licenses they originally requested. Requires the entry `id` and the group's `groupId`. Permissions are enforced upstream — the caller must be allowed to manage the waitlist for the group. If the group is out of licenses or the entry is gone, the upstream error is surfaced verbatim. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Deny a single pending waitlist entry on a DataCamp group: the person stays out of the group and their entry is removed from the waitlist. This is NOT how you grant access — denying means rejecting. The user would have to request to join again if they want back on the list. Requires the entry id and the group's `groupId`. Permissions are enforced upstream — only group admins can manage the waitlist. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Withdraw (revoke) one or more pending email invites from a DataCamp group. Use to clean up invites that haven't been claimed yet. Requires the group's id and an array of invite ids. Permissions are enforced upstream — the caller must be allowed to manage invites for the group. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Create a shareable invite link for a DataCamp group, scoped to one or more email domains. Anyone whose email matches one of the domains can use the link to join the group with the configured license access and team membership. Use this for the "share a link" path; to invite individual people by email, use the dedicated invite-by-email tool instead. Requires the group's id and a non-empty list of `domains` (e.g. `["example.com"]`). Optional: `teamIds` (numeric ids only — resolve names/slugs to ids first) and per-product access levels `learnLicense` and `datalabLicense`. When a license is omitted, the tool picks the highest access level the group has available (enterprise → teams → classroom → basic), falling back to basic. Permissions are enforced upstream. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
List the existing shareable invite links for a DataCamp group, supporting the "share a link" path. Requires the group's id. Each entry includes the link's id and URL, the email domains it is restricted to, the teams joiners are added to, the Learn and DataLab access levels granted to joiners, and when the link was created. Permissions are enforced upstream — results are scoped to what the caller is allowed to see. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Remove a shareable invite link for a DataCamp group, so it can no longer be used to join. Part of the "share a link" path. Requires the group's id and the invite link's id. People who already joined the group via this link are not affected. Permissions are enforced upstream — the caller must be allowed to manage invites for the group. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Update an existing team's metadata inside a DataCamp group. Requires the team's id. At least one of `name`, `slug`, or `hexcode` must be supplied — only the fields you set are changed. Membership is not updated here; use the dedicated team-membership tools for that. Permissions are enforced upstream. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Delete a team from a DataCamp group. Requires the team's id. Members of the team are NOT removed from the group — they remain as group members, just no longer assigned to this team. Permissions are enforced upstream. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
List the members of a DataCamp group who have not earned any XP since registration — i.e. members the Adoption report counts as "not started". Useful when an admin wants to nudge stalled learners with a fresh assignment. **This is not live data** — it is a periodic snapshot and may lag real-time activity. The response includes `snapshot.lastUpdatedAt` indicating when the underlying snapshot was last refreshed; surface it to the user so they know how stale the result is (e.g. "as of 2 hours ago"). Requires the group's id. Only group admins are authorized; managers and team managers will be rejected. This is org-wide admin reporting, not the assignments or progress of the signed-in learner. Returns each member's `userId`, `fullName`, and `email`. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Fallback for clients that cannot attach MCP resources. Returns the same content as the `mcp://group-reporting/schema` resource — the schema and business context needed to write SQL for group reporting. Prefer attaching the resource if your client supports it; only call this tool when it does not, or when the resource is not already in context. Requires the group's id and a DataCamp subscription that includes Data Connector. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
List the custom tracks belonging to a DataCamp group, with an optional state filter. Requires the group's id. Pass `states` to narrow results to specific lifecycle states (`draft`, `published`, `archived`) — omit it to return tracks in all states. Each entry includes the track's id, title, description, and state. Permissions are enforced upstream; results are scoped to what the caller is allowed to see. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Get a single custom track by id within a DataCamp group. Returns the track's metadata and ordered embedded content. Resource items include a track `contentId` plus the public `resourceId` and `resourceType`; when recreating or preserving a resource with `create_custom_track` or `edit_custom_track`, use `resourceId` with `resourceType`, never `contentId`. Call this before replacing content so every item that should remain can be preserved, and call it after every attempted edit to verify the final list. Permissions are enforced upstream — the caller must have access to the group and the track. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
List a cursor-paginated page of learners enrolled in a custom track within a DataCamp group. Requires the group's id and the custom track id. Each enrollee includes their user id, full name, the timestamp they enrolled (`startedAt`), and the timestamp they completed every item (`completedAt`, `null` while still in progress). Pass `nextCursor` from the response as `cursor` to retrieve the next page. Feed the user ids into the reporting tools to drill into per-learner activity. Permissions are enforced upstream — the caller must have access to the group and the track. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Create a new custom track for a DataCamp group from previously discovered courses, projects, assessments, chapters, and resources. The track is created in `draft` state and must be published separately. Requires the group's id, a `title`, and a non-empty ordered `content` array; array order determines learner sequence. Standard content uses `type` (`course`, `project`, `assessment`, or `chapter`) with `contentId`. Native catalog resources use `type: 'resource'` with the catalog search/detail id as `resourceId` and the canonical `resourceType`: code-along → `code_along`, tutorial → `tutorial`, cheat sheet → `cheatsheet`. URL-based external resources created with `create_custom_track_external_resource` use its returned `resourceId` and `resourceType: 'custom'`. Set `requiredForCompletion` to `true` or `false` for each item according to the author's intent. Optionally accepts a description and completion-badge icon and color. Returns the new track with id and URL. Permissions are enforced upstream; the caller must be allowed to author custom tracks for the group. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Edit an existing custom track in a DataCamp group. Supply any subset of `title`, `description`, `content`, `badgeIconName`, and `badgeIconStyle`; omitted fields are unchanged, and at least one must be supplied. Passing `content` **fully replaces** the list: first call `get_custom_track`, copy the complete content list, preserve every item that should remain, and edit that copy. For existing resources, use the returned `resourceId` with `resourceType`, never `contentId`. Native catalog mappings are code-along → `code_along`, tutorial → `tutorial`, and cheat sheet → `cheatsheet`; catalog search/detail ids become `resourceId`. Set `requiredForCompletion` to `true` or `false` according to the author's intent. After every attempted edit, call `get_custom_track` to verify the final list because a failed edit may have applied only part of the replacement. Editing a published track does not move it back to draft. Returns the updated track. Permissions are enforced upstream. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Create a URL-based external resource for a DataCamp group, such as a link to organization documentation, an article, or a video. Use native catalog resources directly instead of creating external-resource copies: code-alongs use `code_along`, tutorials use `tutorial`, and cheat sheets use `cheatsheet`. Requires the group's id, a non-empty `title`, and a fully formed `url`; an optional `description` is shown alongside the title. Returns the created resource. To embed it with `create_custom_track` or `edit_custom_track`, use its returned `resourceId` with `resourceType: 'custom'`. Permissions are enforced upstream. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Update an existing URL-based external resource for a DataCamp group by changing its title, URL, and/or description. Requires the group's id and the external resource id returned as `id` by `create_custom_track_external_resource`; it is also visible as the track `contentId` for that external resource. Supply any subset of `title`, `url`, and `description`; omitted fields are unchanged, and at least one must be supplied. This tool does not update native catalog resources such as code-alongs, tutorials, or cheat sheets. Returns the updated resource. Permissions are enforced upstream. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Publish a draft custom track in a DataCamp group, making it available to learners. Requires the group's id and the custom track id (a track in `state: 'draft'`). Returns only the track id and its new lifecycle state (`published` on success) — fetch the track separately for the full detail. The operation is idempotent: calling it on an already-published track returns the track's current state without changing anything. Permissions are enforced upstream — the caller must have permission to edit custom tracks in the group. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Archive a custom track in a DataCamp group, hiding it from learners while preserving the record. Use when a track is no longer relevant but should not be permanently deleted. Requires the group's id and the custom track id. Returns only the track's id and its new `state` (`'archived'`) — fetch the track separately if the full updated record is needed. The operation is idempotent: calling it on an already-archived track returns the same shape without changing anything. Permissions are enforced upstream — the caller must have permission to manage custom tracks in the group. Before using this tool, clearly state the name of the group you are accessing. Never mix data from different groups in the same task/session. If the user wants to access another group, ask them to start a new task/session or explicitly confirm the switch.
Read from the server on 2026-08-16, including each tool's own safety annotations.
Limits
- Reporting is a daily snapshot, not live data. DataCamp says so plainly, and responses carry a
snapshot.lastUpdatedAtfield. Any figure an agent reports may be up to 24 hours old. - Two reporting features sit behind extra subscriptions.
query_group_reportingandload_group_reporting_promptneed Data Connector;group_reporting_get_time_in_learn_overviewandgroup_reporting_get_time_in_learn_trendneed Time in Learn access. - Role gates the group half. Most reporting is admin-only; team managers see only their teams; regular members have restricted writes. The tools return permission errors, not partial results.
- Search cannot be sorted. DataCamp states that results are ranked by relevance and sorting by other criteria is not currently supported. The result limit caps at 50.
- SQL results cap at 100 rows, with a truncation warning rather than pagination.
- OAuth is client-limited. DataCamp implements it for ChatGPT and Claude only. Every other client falls back to a manually configured bearer token, and stdio-only clients need the mcp-remote bridge.
- The directory listing is behind the server. Anthropic's snapshot lists 87 tool names, one of which — a group-member removal tool — the live server did not return on 2026-08-16; the server exposed 11 names the snapshot lacks, among them
my_activityand the AI Tutor Insights reporting tools. The live handshake is what this page counts. - We did not exercise any tool. Our check was a read-only
tools/listhandshake against the public endpoint. Everything above about behaviour comes from the server's own tool descriptions and DataCamp's documentation.
Frequently asked questions
Do you need a DataCamp account to use the MCP server?
Not for the catalogue. 23 of the 97 tools declare no-auth in the server's own security schemes, covering search, courses, tracks, projects and tutorials. DataCamp's docs say these are public and you can start exploring without an account. The remaining 74 tools read or act on your account and your team's data, so they need sign-in.
How do you sign in to the DataCamp MCP server?
Two ways. DataCamp implements OAuth for ChatGPT, Claude Web, Claude Desktop and Claude Code — you sign in once and are not asked again unless you disconnect. Every other MCP client uses a personal bearer token from datacamp.com/api/jwt/token, set as an Authorization header. DataCamp says to treat that token like a password.
Is DataCamp's group reporting data live?
No. DataCamp's documentation states most reporting tools are not live data and are backed by a daily snapshot. Responses carry a snapshot timestamp so an agent can tell you how stale the figures are, and DataCamp asks that the timestamp be surfaced. Expect numbers to lag by up to a day when reporting on team progress.
Which DataCamp MCP tools can change my team's data?
Twenty-four are annotated destructive by the server, and four more carry no safety annotation at all. The destructive set covers deleting assignments and teams, changing member roles and licences, withdrawing invites and setting AI credit limits. The four unannotated tools all create things — teams, assignments, invite links and custom tracks — so treat them as writes.
Why can't I run DataCamp group reports as a team manager?
Most reporting tools are admin-only. DataCamp's docs state that group managers and team managers cannot run reporting queries or reach organisation-wide reports, so the tools fail on permission rather than returning partial data. Two further gates apply: SQL reporting needs the Data Connector subscription, and Time in Learn reporting needs its own access.
Can you run SQL against DataCamp group reporting?
Yes, through one tool. query_group_reporting runs an Athena SQL query against your group's reporting dataset and returns up to 100 rows, warning you when the result is truncated. It requires the group's DataCamp subscription to include Data Connector, and the schema must be loaded first via load_group_reporting_prompt or an attached MCP resource.
Sources
- DataCamp MCP documentation (retrieved 2026-08-16, via the Markdown variants DataCamp publishes at
/llms.txt) · retrieved 2026-08-16 - DataCamp MCP authentication (retrieved 2026-08-16) · retrieved 2026-08-16
- DataCamp MCP tool catalogue (retrieved 2026-08-16) · retrieved 2026-08-16
- DataCamp MCP group reporting (retrieved 2026-08-16) · retrieved 2026-08-16
- DataCamp MCP search tools (retrieved 2026-08-16) · retrieved 2026-08-16
- DataCamp MCP client setup — and (retrieved 2026-08-16) · retrieved 2026-08-16
- Live
tools/listhandshake againsthttps://mcp.datacamp.com/v1/mcp— 97 tools with descriptions, input schemas, per-tool security schemes and safety annotations (2026-08-16) · retrieved 2026-08-16 - Anthropic Connectors Directory entry (retrieved 2026-08-16) · retrieved 2026-08-16
- DataCamp support (redirects to
/hc/en-us) · Privacy — . Both are the links DataCamp supplied to Anthropic's directory; both refuse automated requests, so we confirmed only that they resolve, not their contents (checked 2026-08-16). · retrieved 2026-08-16
Use in Agentman
Connect once and your agents call these tools on their own — on a schedule, in a workflow, with nobody at the keyboard.
Open in Agentman StudioServer Info
- Category
- Data & Research
- Developer
- DataCamp
- Tools
- 97
- Domain
- mcp.datacamp.com
Using Claude Desktop or another MCP client? Setup docs — the connection URL above works anywhere.