# HiveLearn (remote · mcp.hivelearn.app)

Read and author HiveLearn courses, events, quizzes, certificates, resources, leaderboards, tracks.

- Trust score: 77/100 (medium)
- Change this week: +9
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `mcp.hivelearn.app`: 77/100 (this document), [markdown](https://verifymcp.io/servers/williamechevarria-hivelearn-mcp/mcp.md), [page](https://verifymcp.io/servers/williamechevarria-hivelearn-mcp/mcp)
- npm · `hivelearn-mcp`: 30/100, [markdown](https://verifymcp.io/servers/williamechevarria-hivelearn-mcp/hivelearn-mcp.md), [page](https://verifymcp.io/servers/williamechevarria-hivelearn-mcp/hivelearn-mcp)

## Channel facts

- Endpoint: `https://mcp.hivelearn.app`
- Transports: `streamable-http`
- Auth: `required`
- Version: `0.3.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 89/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, but the challenge carries no valid RFC 9728 metadata, so a client cannot discover where to get a token.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 77/100
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 4763 tokens (~83/item across 57 items; 57 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 74/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 23% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http williamechevarria-hivelearn-mcp https://mcp.hivelearn.app/
```

### Codex

```toml
[mcp_servers.williamechevarria-hivelearn-mcp]
url = "https://mcp.hivelearn.app/"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "williamechevarria-hivelearn-mcp": {
      "type": "remote",
      "url": "https://mcp.hivelearn.app/",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add williamechevarria-hivelearn-mcp --url https://mcp.hivelearn.app/ --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  williamechevarria-hivelearn-mcp:
    url: "https://mcp.hivelearn.app/"
```

### Other

```json
{
  "mcpServers": {
    "williamechevarria-hivelearn-mcp": {
      "type": "http",
      "url": "https://mcp.hivelearn.app/"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 77, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 76, +6)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-29 (score 70, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-28 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 68, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 68)

First indexed and scored.

## MCP tools (57)

### `hivelearn_get_community_me` (~51 tokens)

Returns the community the current API key is scoped to. Use this first whenever you need the community_id, owner, slug, or tier — the API key determines tenancy, you cannot switch community.

### `hivelearn_list_members` (~86 tokens)

List members of the authenticated community. Returns id (profile uuid), role, email, display_name, avatar_url, and joined_at. Filter by role to find admins/owners.

Input parameters:

- `limit` (integer): Page size, default 20
- `offset` (integer): Rows to skip, default 0
- `role` (string): Restrict to a single role

### `hivelearn_get_member` (~45 tokens)

Fetch a single member by profile uuid. Returns the same fields as list_members for one row.

Input parameters:

- `id` (string, required): Profile uuid (matches the id from list_members)

### `hivelearn_update_member` (~85 tokens)

Change a member's role or ban status. role accepts member/moderator/admin (owner cannot be assigned via the API). Set is_banned=true to ban, false to lift. At least one field required.

Input parameters:

- `id` (string, required): Profile uuid (matches the id from list_members)
- `is_banned` (boolean)
- `role` (string)

### `hivelearn_list_posts` (~84 tokens)

List community feed posts, newest first. Use category to filter (e.g. "announcements"). Returns id, title, content, category, author, reply counts, timestamps.

Input parameters:

- `category` (string): Filter by category slug
- `limit` (integer): Page size, default 20
- `offset` (integer): Rows to skip, default 0

### `hivelearn_get_post` (~37 tokens)

Fetch one post with full content. Reply thread is NOT included — this is the post itself only.

Input parameters:

- `id` (string, required)

### `hivelearn_create_post` (~110 tokens)

Publish a new post to the community feed. Either content (markdown) or content_json (tiptap) is required. content_format must match which field you sent. category is optional — omit for default "general".

Input parameters:

- `category` (string)
- `content` (string): Markdown body (use when content_format=markdown)
- `content_format` (string): Defaults to markdown
- `content_json` (object): Tiptap JSON doc (use when content_format=tiptap_json)

### `hivelearn_update_post` (~86 tokens)

Edit an existing post. Only include fields you want to change. Use is_pinned to pin/unpin a post from the top of the feed.

Input parameters:

- `category` (string)
- `content` (string)
- `content_format` (string)
- `content_json` (object)
- `id` (string, required)
- `is_pinned` (boolean)

### `hivelearn_list_events` (~92 tokens)

List community events. Use upcoming=true for future events only (recommended for calendar UI). Returns id, title, start/end dates, event_type, location/meeting_url, attendee counts.

Input parameters:

- `limit` (integer): Page size, default 20
- `offset` (integer): Rows to skip, default 0
- `upcoming` (boolean): If true, only events with start_date in the future

### `hivelearn_get_event` (~29 tokens)

Fetch one event by id with full description and RSVP metadata.

Input parameters:

- `id` (string, required)

### `hivelearn_create_event` (~170 tokens)

Create a calendar event. Dates are ISO 8601 strings in UTC. For virtual events set meeting_url; for in-person set location. event_type controls which field the UI shows.

Input parameters:

- `cover_image_url` (string)
- `description` (string)
- `description_format` (string)
- `description_json` (object)
- `end_date` (string, required): ISO 8601 timestamp
- `event_type` (string, required)
- `location` (string)
- `max_attendees` (integer)
- `meeting_url` (string)
- `start_date` (string, required): ISO 8601 timestamp
- `tags` (array)
- `timezone` (string): IANA tz, e.g. "America/New_York"
- `title` (string, required)

### `hivelearn_update_event` (~151 tokens)

Edit an event. Set is_cancelled=true to cancel (preserves history). Set max_attendees=null to lift the cap.

Input parameters:

- `cover_image_url` (string)
- `description` (string)
- `description_format` (string)
- `description_json` (object)
- `end_date` (string)
- `event_type` (string)
- `id` (string, required)
- `is_cancelled` (boolean)
- `location` (string)
- `max_attendees`
- `meeting_url` (string)
- `start_date` (string)
- `tags` (array)
- `timezone` (string)
- `title` (string)

### `hivelearn_list_courses` (~81 tokens)

List courses in the authenticated community. status=published returns only courses visible to learners. Returns id, title, visibility, is_published, thumbnail_url, timestamps.

Input parameters:

- `limit` (integer): Page size, default 20
- `offset` (integer): Rows to skip, default 0
- `status` (string): Defaults to "all"

### `hivelearn_get_course` (~44 tokens)

Fetch one course with full metadata (description, instructor, tags, flags). For the lesson tree use hivelearn_get_course_structure instead.

Input parameters:

- `id` (string, required)

### `hivelearn_create_course` (~119 tokens)

Create an empty course (no modules/lessons). Prefer hivelearn_create_course_outline when you already know the structure — it scaffolds course + modules + lesson placeholders in one call.

Input parameters:

- `description` (string)
- `description_format` (string)
- `description_json` (object)
- `difficulty`
- `instructor_avatar_url`
- `instructor_name`
- `tags` (array)
- `thumbnail_url`
- `title` (string, required)
- `visibility` (string): Defaults to all_members

### `hivelearn_update_course` (~132 tokens)

Edit course metadata. Use hivelearn_publish_course instead of setting is_published=true directly — publish runs validation.

Input parameters:

- `description`
- `description_format` (string)
- `description_json` (object)
- `difficulty`
- `id` (string, required)
- `instructor_avatar_url`
- `instructor_name`
- `is_featured` (boolean)
- `is_pinned` (boolean)
- `is_published` (boolean)
- `tags` (array)
- `thumbnail_url`
- `title` (string)
- `visibility` (string)

### `hivelearn_list_course_modules` (~46 tokens)

List modules (sections) of a course, ordered by sort_order. Modules group lessons; a course has 1..N modules.

Input parameters:

- `course_id` (string, required)

### `hivelearn_create_module` (~52 tokens)

Add a module to a course. sort_order is optional — server auto-appends if omitted.

Input parameters:

- `course_id` (string, required)
- `sort_order` (integer)
- `title` (string, required)

### `hivelearn_update_module` (~53 tokens)

Rename or reorder a module. To reorder lessons within a module use hivelearn_reorder_module_lessons.

Input parameters:

- `id` (string, required)
- `sort_order` (integer)
- `title` (string)

### `hivelearn_list_course_lessons` (~51 tokens)

List lessons of a course, optionally filtered to one module. Use hivelearn_get_course_structure for a nested tree.

Input parameters:

- `course_id` (string, required)
- `module_id` (string)

### `hivelearn_create_lesson` (~163 tokens)

Add a lesson to a course. content_type must match content_url (e.g. youtube URL → content_type:youtube). Set module_id=null to leave the lesson unassigned; otherwise pass a module uuid from list_course_modules.

Input parameters:

- `content_format` (string)
- `content_json` (object)
- `content_type` (string)
- `content_url` (string, required)
- `course_id` (string, required)
- `description`
- `duration_seconds` (integer)
- `is_preview` (boolean): If true, visible to non-enrolled users
- `is_published` (boolean)
- `module_id`
- `sort_order` (integer)
- `thumbnail_url`
- `title` (string, required)

### `hivelearn_update_lesson` (~137 tokens)

Edit lesson metadata or move it between modules. To edit ONLY the content body use hivelearn_update_lesson_content (narrower scope, safer).

Input parameters:

- `content_format` (string)
- `content_json` (object)
- `content_type` (string)
- `content_url` (string)
- `description`
- `duration_seconds` (integer)
- `id` (string, required)
- `is_preview` (boolean)
- `is_published` (boolean)
- `module_id`
- `sort_order` (integer)
- `thumbnail_url`
- `title` (string)

### `hivelearn_create_course_outline` (~159 tokens)

Scaffold an entire course in one call: course + modules + lesson placeholders (title/description only, no content yet). After this, loop over the returned lesson ids with hivelearn_update_lesson_content to fill in video/document URLs. This is the preferred first step when authoring a new course from a plan.

Input parameters:

- `description` (string)
- `description_format` (string)
- `description_json` (object)
- `difficulty`
- `instructor_avatar_url`
- `instructor_name`
- `modules` (array, required): Ordered list of modules; each with optional lesson placeholders
- `tags` (array)
- `thumbnail_url`
- `title` (string, required)
- `visibility` (string)

### `hivelearn_update_lesson_content` (~116 tokens)

Replace just the content of a lesson — URL, content_type, and optional description/duration/thumbnail. Narrower than update_lesson; safe for bulk agent writes. Does NOT change title, sort_order, or module assignment.

Input parameters:

- `content_format` (string)
- `content_json` (object)
- `content_type` (string)
- `content_url` (string)
- `description`
- `duration_seconds` (integer)
- `id` (string, required)
- `thumbnail_url`

### `hivelearn_reorder_module_lessons` (~62 tokens)

Set the full lesson order within a module in one atomic call. Pass the desired final order as lesson_ids — every lesson currently in the module must appear exactly once.

Input parameters:

- `lesson_ids` (array, required)
- `module_id` (string, required)

### `hivelearn_publish_course` (~53 tokens)

Publish a course: sets is_published=true after validating that every lesson has content_url. Returns error if any lesson is still empty — run hivelearn_get_course_structure to diagnose.

Input parameters:

- `id` (string, required)

### `hivelearn_get_course_structure` (~58 tokens)

Return a compact titles-only tree of the course: course → modules → lessons. Ideal for agents to plan reorders, spot empty lessons, or summarize a course. Does NOT include lesson body content.

Input parameters:

- `id` (string, required)

### `hivelearn_list_quizzes` (~74 tokens)

List quizzes, optionally scoped to a course or a specific lesson. Each quiz belongs to one lesson.

Input parameters:

- `course_id` (string)
- `lesson_id` (string)
- `limit` (integer): Page size, default 20
- `offset` (integer): Rows to skip, default 0

### `hivelearn_get_quiz` (~47 tokens)

Fetch one quiz with metadata (passing_score, time_limit, max_attempts). Questions are NOT included — use hivelearn_list_quiz_questions.

Input parameters:

- `id` (string, required)

### `hivelearn_create_quiz` (~91 tokens)

Create a quiz attached to a lesson. passing_score is 0-100 (percent). Omit time_limit_seconds or max_attempts for unlimited.

Input parameters:

- `description`
- `lesson_id` (string, required)
- `max_attempts`
- `passing_score` (integer)
- `shuffle_questions` (boolean)
- `time_limit_seconds`
- `title` (string, required)

### `hivelearn_update_quiz` (~79 tokens)

Edit quiz settings. Cannot move a quiz to a different lesson — create a new one instead.

Input parameters:

- `description`
- `id` (string, required)
- `max_attempts`
- `passing_score` (integer)
- `shuffle_questions` (boolean)
- `time_limit_seconds`
- `title` (string)

### `hivelearn_list_quiz_questions` (~41 tokens)

List all questions for a quiz, ordered by sort_order. Each question carries its options and correct answer.

Input parameters:

- `quiz_id` (string, required)

### `hivelearn_create_quiz_question` (~138 tokens)

Add a question to a quiz. For multiple_choice: pass options as an array of { text, is_correct } objects — at least one must be is_correct:true. For true_false: omit options and set correct_answer (boolean).

Input parameters:

- `correct_answer` (boolean): For true_false only
- `explanation`
- `options` (array): For multiple_choice only; shape: [{text, is_correct}]
- `points` (integer): Defaults to 1
- `question_text` (string, required)
- `question_type` (string, required)
- `quiz_id` (string, required)
- `sort_order` (integer)

### `hivelearn_update_quiz_question` (~92 tokens)

Edit a question. Changing question_type will require resupplying options or correct_answer to match the new type.

Input parameters:

- `correct_answer` (boolean)
- `explanation`
- `id` (string, required)
- `options` (array)
- `points` (integer)
- `question_text` (string)
- `question_type` (string)
- `sort_order` (integer)

### `hivelearn_list_enrollments` (~89 tokens)

List course enrollments, optionally scoped to one course or one user. Returns enrollment_id, user_id, course_id, status, progress %, enrolled_at, completed_at.

Input parameters:

- `course_id` (string)
- `limit` (integer): Page size, default 20
- `offset` (integer): Rows to skip, default 0
- `user_id` (string)

### `hivelearn_get_enrollment` (~26 tokens)

Fetch one enrollment with status and progress.

Input parameters:

- `id` (string, required)

### `hivelearn_create_enrollment` (~54 tokens)

Enroll a user in a course. Both user_id and course_id must belong to the authenticated community. Duplicate enrollments are rejected.

Input parameters:

- `course_id` (string, required)
- `user_id` (string, required)

### `hivelearn_get_course_progress` (~86 tokens)

Aggregate lesson-completion progress for a course across enrolled users. Returns per-user percent_complete, last_accessed_at, completed_lesson_count.

Input parameters:

- `course_id` (string, required)
- `limit` (integer): Page size, default 20
- `offset` (integer): Rows to skip, default 0
- `user_id` (string): Scope to one user

### `hivelearn_get_course_gradebook` (~81 tokens)

Quiz-score gradebook for a course: per-user quiz attempts, scores, pass/fail. Use for analytics or grading dashboards.

Input parameters:

- `course_id` (string, required)
- `limit` (integer): Page size, default 20
- `offset` (integer): Rows to skip, default 0
- `user_id` (string)

### `hivelearn_list_certificates` (~82 tokens)

List issued certificates, optionally scoped to one user or one course. Returns id, user, course, verification_code, status, issued_at.

Input parameters:

- `course_id` (string)
- `limit` (integer): Page size, default 20
- `offset` (integer): Rows to skip, default 0
- `user_id` (string)

### `hivelearn_get_certificate` (~30 tokens)

Fetch one certificate by id. Includes verification_code and download URL.

Input parameters:

- `id` (string, required)

### `hivelearn_create_certificate` (~104 tokens)

Issue a certificate of completion to a user for a course. Normally the platform auto-issues on course completion — use this tool for bulk backfill or manual awards.

Input parameters:

- `completion_date` (string): ISO timestamp; defaults to now
- `course_id` (string, required)
- `expires_at`: ISO timestamp; omit or null for no expiry
- `final_score` (integer)
- `instructor_name` (string)
- `user_id` (string, required)

### `hivelearn_update_certificate` (~42 tokens)

Change a certificate status. Use "revoked" to invalidate (verify endpoint will reject).

Input parameters:

- `id` (string, required)
- `status` (string, required)

### `hivelearn_verify_certificate` (~53 tokens)

Public verification lookup by verification_code. Returns { valid, certificate } if found and active. Use this when a third party presents a certificate code.

Input parameters:

- `code` (string, required): The verification_code printed on the certificate

### `hivelearn_list_resources` (~124 tokens)

List published resources in the authenticated community, newest first. Filter by folder_id, resource_type, or access_level. Returns id, title, resource_type, resource_url/file_url, access_level, counts (downloads, views, favorites), author. The internal storage key is never exposed.

Input parameters:

- `access_level` (string)
- `folder_id` (string): Filter to a single resource folder
- `limit` (integer): Page size, default 20
- `offset` (integer): Rows to skip, default 0
- `resource_type` (string)

### `hivelearn_get_resource` (~37 tokens)

Fetch one published resource by id, with joined author. 404 if unpublished or in another community.

Input parameters:

- `id` (string, required)

### `hivelearn_create_resource` (~186 tokens)

Add a resource to the community library. Supply either resource_url (external link) or file_url (already-uploaded file) — at least one is required. price must be > 0 if set (omit for free). access_level defaults to public.

Input parameters:

- `access_level` (string): Defaults to public
- `cover_image_url` (string)
- `description` (string)
- `file_url` (string): For already-uploaded file resources
- `folder_id` (string)
- `is_premium` (boolean)
- `is_published` (boolean): Defaults to true
- `price` (number): One-time price (> 0); omit for free
- `resource_type` (string): Defaults to "guide"
- `resource_url` (string): For external-link resources
- `tags` (array)
- `title` (string, required)

### `hivelearn_update_resource` (~144 tokens)

Edit a resource. Only include fields you want to change. Set is_featured to surface it; set is_published=false to unlist.

Input parameters:

- `access_level` (string)
- `cover_image_url`
- `description` (string)
- `file_url` (string)
- `folder_id`
- `id` (string, required)
- `is_featured` (boolean)
- `is_premium` (boolean)
- `is_published` (boolean)
- `price`
- `resource_type` (string)
- `resource_url` (string)
- `tags` (array)
- `title` (string)

### `hivelearn_get_leaderboard` (~92 tokens)

Ranked member leaderboard for the community. period chooses the window: all_time (default), 30_day, or 7_day. Each entry carries rank and the points for the selected period, plus level info.

Input parameters:

- `limit` (integer): Page size, default 20
- `offset` (integer): Rows to skip, default 0
- `period` (string): Defaults to all_time

### `hivelearn_get_member_points` (~74 tokens)

Full points breakdown for one member (by auth user id) in the community: total, per-category (posts/comments/events/courses/engagement), period totals, level. 404 if the member has no points record here.

Input parameters:

- `user_id` (string, required): The auth user id (community_members.user_id)

### `hivelearn_list_tracks` (~69 tokens)

List published learning tracks (curated course sequences) in the community, newest first. Returns id, title, description, difficulty_level, estimated_hours, flags.

Input parameters:

- `limit` (integer): Page size, default 20
- `offset` (integer): Rows to skip, default 0

### `hivelearn_get_track` (~38 tokens)

Fetch one learning track by id with full metadata. For its ordered curriculum use hivelearn_list_track_courses.

Input parameters:

- `id` (string, required)

### `hivelearn_list_track_courses` (~47 tokens)

Return the ordered curriculum of a track: its courses with sort_order, is_required, and unlock_after_course_id (prerequisite gating).

Input parameters:

- `track_id` (string, required)

### `hivelearn_get_track_progress` (~76 tokens)

Per-member progress through a learning track: enrolled_at, started_at, completed_at, total_courses, completed counts. Use for cohort/track analytics.

Input parameters:

- `limit` (integer): Page size, default 20
- `offset` (integer): Rows to skip, default 0
- `track_id` (string, required)

### `hivelearn_create_track` (~107 tokens)

Create a learning track (curated course sequence). After this, add courses in order with hivelearn_add_track_course. is_published defaults to false — publish once the curriculum is set.

Input parameters:

- `description` (string)
- `difficulty_level` (string)
- `estimated_hours` (integer)
- `is_featured` (boolean)
- `is_published` (boolean): Defaults to false
- `thumbnail_url` (string)
- `title` (string, required)

### `hivelearn_update_track` (~92 tokens)

Edit a learning track. Only include fields you want to change. Set is_published=true to make it live.

Input parameters:

- `description` (string)
- `difficulty_level` (string)
- `estimated_hours`
- `id` (string, required)
- `is_featured` (boolean)
- `is_published` (boolean)
- `thumbnail_url`
- `title` (string)

### `hivelearn_add_track_course` (~116 tokens)

Add a course to a track at a given position. sort_order sets the order within the track. Set unlock_after_course_id to a prerequisite course that must be completed first (omit/null for no gate). is_required defaults to true.

Input parameters:

- `course_id` (string, required)
- `is_required` (boolean): Defaults to true
- `sort_order` (integer, required): Position within the track
- `track_id` (string, required)
- `unlock_after_course_id`: Prerequisite course id, or null for no gate

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/williamechevarria-hivelearn-mcp/mcp#diagnostics

## Score history

- 2026-08-03: 77
- 2026-08-02: 77
- 2026-08-01: 76
- 2026-07-31: 76
- 2026-07-30: 70
- 2026-07-29: 70
- 2026-07-28: 69
- 2026-07-27: 68
- 2026-07-26: 68

## Links

- Remote endpoint: https://mcp.hivelearn.app/
- Authorisation metadata: https://mcp.hivelearn.app/.well-known/oauth-protected-resource
- Website: https://hivelearn.app/mcp
- Changelog RSS feed: https://verifymcp.io/servers/williamechevarria-hivelearn-mcp/mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/williamechevarria-hivelearn-mcp/mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/williamechevarria-hivelearn-mcp/mcp
