hearthis
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HEARTHIS_KEY | Yes | Your hearthis.at API key from the key pair printed by `npx hearthis-mcp login`. | |
| HEARTHIS_SECRET | Yes | Your hearthis.at API secret from the key pair printed by `npx hearthis-mcp login`. | |
| HEARTHIS_UPLOAD_DIR | No | Optional directory from which uploads are allowed. If set, only files from this folder can be uploaded. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| whoamiB | The hearthis.at account this server acts as: id, permalink, name, counts and Premium state. |
| get_feedB | Newest public tracks on hearthis.at, or the popular ones (optionally within one genre). |
| list_genresA | All genres with their ids and slugs. Includes "later" once the account saved something to Listen later. |
| get_genre_tracksB | Tracks of one genre, newest first. |
| get_home_sectionB | One section of the hearthis.at home screen: stories (banners), latest_artists (featured artists), moods, newcomers (first upload in the last 7 days), genres_today (sounds per genre in the last 24 h), premium (plans and running promotion). |
| searchB | Search tracks, artists (users) or playlists by text. |
| get_eventsA | Upcoming events (gigs, live shows), or one event with its id. |
| get_listen_historyC | Tracks the account listened to recently. |
| get_listen_laterB | The Listen later list of the account, newest first. |
| get_trackB | Metadata of one track: title, artist, genre, duration, counts, stream and artwork URLs. |
| get_track_partB | More about one track: playlist (chapters / tracklist), transcript (AI transcript), related (similar tracks), reactions (emoji reactions) or comments. |
| toggle_likeA | Likes a track, or removes the like when it is already liked. The answer says the new state. |
| toggle_repostA | Reposts a track to the account's followers, or takes the repost back when it already exists. |
| set_listen_laterA | Saves a track of someone else to Listen later (on=true), removes it (on=false), or toggles (on omitted). |
| get_cast_urlA | A signed MP3 URL of a track for a cast receiver, valid 12 hours; fetching it counts as a play of this account. |
| post_commentA | Posts a public comment on a track, optionally at a position in seconds or as a reply to another comment. |
| delete_commentB | Deletes a comment of the account (or any comment on an own track). |
| post_reactionA | Posts an emoji reaction at a position of a track. Valid reaction ids are in get_track_part part=reactions. |
| streaming_qualityA | Streaming quality of an own track. Without value: the current state. value=best queues the highest quality of the file type; a number queues that bitrate (999 = original MP3, 1000 = lossless). The change is transcoded in the background. |
| copy_track_imageA | Copies the cover or background image of another own track onto this own track. |
| upload_trackA | Uploads a local audio file (mp3, wav, flac, aac, m4a, ogg, aif/aiff, wma, opus) as a new track of the account, with optional metadata and cover. The track stays private unless private=false - publish only when the user asked for it. Only upload files the user named. |
| edit_trackB | Changes settings of an own track - everything the edit page can change, by the same rules. Only the fields given change; options the account cannot use (plan, fan programme, transcript) keep their value. private=false publishes the track and notifies followers. answer.waiting=true: the title matched a copyright keyword and the sound waits for approval. |
| delete_trackA | Deletes an own track. Ask the user for confirmation first. |
| set_track_coverA | Sets or replaces the cover of an own track from a local JPG or PNG (max 10 MB). |
| remove_track_coverC | Removes the cover of an own track. |
| get_userC | A profile, or one of its lists: tracks, likes, reposts, following, followers, playlists, connected, badges. |
| toggle_followA | Follows a user, or unfollows when the account already follows them. User id from get_user. |
| badge_settingsB | Shows badges on the profile (badges_public) and the weekly mail about new badges (email_badges). Only the fields given change. |
| get_fan_subscriptionsB | subscribed: the fan subscriptions the account pays. subscribers: the account's fans with statistics. |
| list_my_setsC | Sets (playlists) of the account. |
| get_setC | All tracks of a set. |
| add_to_setA | Adds a track to an existing set (set_id), or creates a new set with that name (new_set_name). |
| edit_setC | Changes a set of the account by the rules of its edit page - only the fields given change. Owner and moderators; privat only the owner. |
| edit_profileA | Changes the profile of the account by the rules of its settings page - only the fields given change. Options of a plan the account does not have keep their value. E-mail, password, profile address, payouts, podcast and fan subscriptions change only on the website; the answer lists such fields under ignored. |
| remove_from_setC | Removes a track from a set of the account. |
| delete_setA | Deletes a set of the account (the tracks stay). Ask the user for confirmation first. |
| list_groupsB | Groups of a genre, groups a user owns (user_groups) or groups a user joined (joined; default: this account). |
| get_groupC | A group: info (metadata and own permissions), tracks (paged), members (owner first). |
| create_groupC | Creates a group owned by the account. |
| edit_groupB | Changes a group by the rules of its edit page - only the fields given change. Owner and editors; private only the owner. member_notify=true mails the members about every new sound - only switch it on when the user asked. |
| join_groupA | Joins a group (join=true) or leaves it (join=false). The owner cannot leave. |
| group_trackA | Adds a track to a group (add=true) or removes it (add=false). Owner, editors and the sound's author are published at once; others wait while the group asks for approval. Adding notifies the members and may mail the owner. |
| group_member_roleA | Owner only: makes a member an editor or a plain member, or blocks them (use group_block to lift a block). |
| group_blockA | Owner and editors: blocks a user from a group (they leave it and cannot join or add) or lifts the block. |
| group_approveB | Owner and editors: publishes a sound that waits for approval; the members are told about it. |
| delete_groupA | Owner only: deletes a group. Ask the user for confirmation first. |
| list_conversationsA | Direct-message conversations of the account, most recent first, with unread counts. |
| read_conversationA | Messages with one user, oldest first. Leaves them unread unless mark_read=true. |
| poll_messagesA | Incoming messages with an id above since (max 100). Without since only the current cursor comes back. Marks nothing as read. |
| send_messageB | Sends a direct message (max 2000 characters) to a user. Only send what the user asked to send. |
| delete_conversationB | Deletes a whole conversation for both sides. Ask the user for confirmation first. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 51 tools
Most tools target clearly distinct resources and actions, and descriptions clarify near-neighbors such as get_feed vs get_genre_tracks vs get_home_section, or get_track vs get_track_part. The large group-management surface has several related tools, but their boundaries are still mostly understandable.
The set is predominantly snake_case and many names follow verb_noun, but there are notable deviations like whoami, streaming_quality, badge_settings, group_member_role, group_block, group_approve, and group_track. These remain readable, but the convention is mixed rather than consistently verb_noun.
With 51 tools, the server is far above the typical 3-15 range and is heavy for an agent to navigate, even though the domain is broad. The tools are organized by area, but the count is still excessive for practical tool selection.
Coverage is strong across tracks, sets, groups, direct messages, profiles, discovery, and social actions, with CRUD and moderation workflows largely present. Minor gaps remain, such as notifications, comment editing, and event creation, but core workflows are covered.