slskd-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@slskd-mcpfind Aphex Twin in FLAC and download the top result"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
slskd-mcp
A production-ready Model Context Protocol (MCP) server for slskd (the modern Soulseek client daemon).
slskd-mcp allows AI agents (such as Hermes Agent, Claude, etc.) to interact with the Soulseek P2P music sharing network directly: searching for artists, releases, and tracks, filtering by format and bitrate, managing downloads, monitoring active transfers, and browsing peer libraries.
Features
Soulseek Health & Status: Monitor Soulseek daemon connection, login status, server address, peer stats, and shared library size.
P2P Search & Smart Ranking: Search the global Soulseek network. Results are automatically ranked prioritizing peers with free upload slots, lowest queue lengths, and highest transfer speeds.
Format & Quality Filtering: Filter results by audio format (
flac,mp3,ogg,wav, etc.) and minimum bitrate (e.g.320kbps).Download Management: Enqueue releases or tracks directly into the slskd download directory.
Real-Time Transfer Tracking: Monitor live progress, download/upload speeds, percent complete, remaining bytes, and ETAs.
Peer Library Browsing: Browse directories and examine shared music collections of specific Soulseek users.
Resilient Auth & Session Handling: Native JWT authentication with automatic token caching and seamless re-authentication on expiration (
401 Unauthorized), plus optional static API key support.Zero-Port stdio Transport: Communicates via standard I/O streams using FastMCP for secure, local agent integration.
Related MCP server: Soulseek MCP
Requirements
Python 3.10+ (tested up to Python 3.14)
A running slskd daemon with API enabled (default:
http://127.0.0.1:5030)
Installation
Option 1: Using uv (Recommended)
git clone https://github.com/alephtheagent/slskd-mcp.git
cd slskd-mcp
uv venv venv
uv pip install -e .Option 2: Standard Python venv
git clone https://github.com/alephtheagent/slskd-mcp.git
cd slskd-mcp
python3 -m venv venv
source venv/bin/activate
pip install -e .Configuration
The server is configured via environment variables (or a local .env file). All variables use the SLSKD_ prefix:
Environment Variable | Default Value | Description |
|
| Base URL of the slskd daemon |
|
| slskd Web UI / API username |
|
| slskd Web UI / API password |
| (None) | Optional static API key ( |
|
| Default HTTP request timeout (seconds) |
|
| Default duration for search network polling (seconds) |
Tool Reference
1. slskd_status
Check slskd connection to Soulseek, connected peers, and transfer stats.
Parameters: None
Returns:
{ "connected": true, "logged_in": true, "username": "polymatic", "version": "0.26.0.0", "upload_speed": 8737820.0, "download_speed": 0.0, "peer_count": 0, "shares_directories": 18, "shares_files": 266, "server_address": "208.76.170.59:2242" }
2. slskd_search
Search the Soulseek network for music files, albums, or artists. Polls until responses arrive or timeout expires, then ranks and filters the results.
Parameters:
query(str, required): Search string (e.g."Aphex Twin Selected Ambient Works"or"Sewerslvt").timeout_seconds(int, optional, default:15): Search duration (minimum 5s).max_results(int, optional, default:50): Maximum ranked results to return.format_filter(str, optional): File extension filter (e.g."flac","mp3").min_bitrate(int, optional, default:0): Minimum bitrate threshold in kbps (e.g.320). Lossless audio (FLAC/WAV) is preserved.exclude_locked(bool, optional, default:True): Automatically exclude password-locked files and peers with closed/rejected transfers.max_queue_length(int, optional, default:500): Exclude peers whose queue exceeds this threshold. SetNoneto disable.
Returns: List of ranked file entries:
[ { "user": "plexusnexus", "filename": "share\\Aphex Twin FLAC\\1991 - Analogue Bubblebath 2\\01. Digeridoo.flac", "size": 52758120, "size_mb": 50.31, "bitrate": null, "has_free_upload_slot": true, "upload_speed": 9850632, "queue_length": 0, "is_locked": false } ]
3. slskd_download
Enqueue a file from a specific user for download.
Parameters:
username(str, required): The Soulseek peer holding the file.filename(str, required): Remote file path as returned by search or browse.size(int, optional, default:0): File size in bytes.
Returns:
{ "success": true, "username": "plexusnexus", "filename": "share\\Aphex Twin FLAC\\1991 - Analogue Bubblebath 2\\01. Digeridoo.flac", "size": 52758120, "status": "queued", "message": "File successfully enqueued for download" }
4. slskd_get_transfers
List current downloads or uploads with speeds, bytes transferred, queue position, and status.
Parameters:
direction(str, optional, default:"downloads"): Either"downloads"or"uploads".
Returns:
[ { "id": "d7673046-70e9-4092-82f5-51739790754c", "username": "deathalchemy", "direction": "Download", "filename": "music\\Linkin Park\\Hybrid Theory (2000)\\01 - Papercut.flac", "size": 45082764, "state": "Completed, Succeeded", "percent_complete": 100.0, "bytes_transferred": 45082764, "bytes_remaining": 0, "average_speed": 293394.51, "elapsed_time": "00:02:33.6591936", "remaining_time": "00:00:00" } ]
5. slskd_cancel_download
Cancel or remove an active/queued transfer.
Parameters:
username(str, required): Soulseek peer username.id(str, required): Transfer ID (fromslskd_get_transfers).
Returns:
{ "success": true, "username": "deathalchemy", "id": "d7673046-70e9-4092-82f5-51739790754c", "message": "Transfer successfully removed or canceled" }
6. slskd_browse_user
Browse shared directory structure of a Soulseek peer.
Parameters:
username(str, required): Peer username.directory(str, optional): Specific remote directory path to list. If omitted, queries the peer's root library or returns share availability.
Returns: Directory listing containing files, sizes, bitrates, and track lengths.
7. slskd_download_directory
Download an entire album or directory from a peer in a single batch request.
Parameters:
username(str, required): Peer username.directory(str, required): Remote directory path as shared by the peer.format_filter(str, optional): Extension filter (e.g."flac","mp3").
8. slskd_clear_transfers
Clear all completed, succeeded, or failed transfers from the download or upload transfer lists.
Parameters:
direction(str, optional, default:"downloads"):"downloads"or"uploads".
9. slskd_get_me
Get detailed metrics and statistics for our own Soulseek account (polymatic).
10. slskd_get_user_info
Fetch presence status, profile bio, free upload slots, and queue length for any Soulseek peer.
Parameters:
username(str, required): Peer username.
11. slskd_get_shares & slskd_rescan_shares
Inspect local shared folders (/var/music/flac/main, etc.) and trigger background library re-indexing.
Hermes Agent Integration
To register slskd-mcp with Hermes Agent:
echo "y" | hermes mcp add slskd-mcp \
--command /home/aleph/slskd-mcp/venv/bin/python \
--args /home/aleph/slskd-mcp/main.pyIf slskd runs on a custom URL or credentials, pass --env before --args:
echo "y" | hermes mcp add slskd-mcp \
--command /home/aleph/slskd-mcp/venv/bin/python \
--env SLSKD_URL=http://127.0.0.1:5030 \
--env SLSKD_USERNAME=slskd \
--env SLSKD_PASSWORD=slskd \
--args /home/aleph/slskd-mcp/main.pyVerify connection:
hermes mcp test slskd-mcp
hermes mcp listClaude Desktop Integration
Add to your claude_desktop_config.json:
{
"mcpServers": {
"slskd": {
"command": "/path/to/slskd-mcp/venv/bin/python",
"args": ["/path/to/slskd-mcp/main.py"],
"env": {
"SLSKD_URL": "http://127.0.0.1:5030",
"SLSKD_USERNAME": "slskd",
"SLSKD_PASSWORD": "slskd"
}
}
}
}Testing
Run the test suite against a live or local slskd daemon:
./venv/bin/pytest tests/License
MIT License. See LICENSE for details.
Available Tools
6 toolsslskd_browse_userSlskd Browse UserC
Browse shared directory structure of a Soulseek peer.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | Soulseek peer username. | |
| directory | No | Optional specific directory path to list (e.g. 'music\AlbumName'). If omitted, attempts full peer library browse or returns peer share info. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Browse' implies read-only, but the description does not state whether it is non-destructive, whether it depends on peer availability, how long a full-library browse may take, or what happens if the peer is offline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is efficient, though its brevity is partly the cause of the missing behavioral and usage detail rather than pure tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is too thin. It does not describe what is returned (directory tree vs. share info) or how the optional directory parameter changes behavior, even though the schema hints at that distinction.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both username and the optional directory path with an example. The description adds no parameter-level detail beyond the schema, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: 'Browse shared directory structure of a Soulseek peer.' An agent can tell this is a read of remote peer shares, distinct from transfer-oriented siblings. However, it does not name or differentiate against siblings like slskd_search, which also discovers remote content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (peer online, share access), and no reference to alternatives such as slskd_search for finding files. The agent must infer the use case entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slskd_cancel_downloadSlskd Cancel DownloadB
Cancel or remove an active/queued transfer.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Transfer ID (as returned by slskd_get_transfers). | |
| username | Yes | Soulseek peer username associated with the transfer. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it never discloses irreversibility, whether cancelled partial files are deleted or retained, or permission requirements. The 'cancel or remove' phrasing also leaves two distinct behaviors (stop vs. delete) conflated without explaining when each applies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the action front-loaded and zero filler. It is efficient rather than padded, though the extreme brevity is what leaves the behavioral gaps noted above.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the parameters are fully documented in the schema. But for a destructive mutation tool with no annotations, the description omits the operation's consequences and preconditions, leaving the agent materially under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents both 'id' (with its source, slskd_get_transfers) and 'username'. The description adds nothing about the parameters, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (cancel/remove) and a clearly bounded resource (active/queued transfer), which is unambiguous against siblings like slskd_download or slskd_get_transfers. It stops short of naming how it differs from other transfer-lifecycle tools, but the action is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The qualifier 'active/queued' implies a precondition for use, so an agent can infer this only applies to in-flight or pending transfers. There is no explicit when-not guidance, no mention of what to do for completed/failed transfers, and no alternative tool routed for other transfer operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slskd_downloadSlskd DownloadC
Enqueue a file from a specific user for download.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | File size in bytes (optional but recommended, from search results). | |
| filename | Yes | The exact remote file path as returned by search or browse. | |
| username | Yes | The Soulseek peer's username holding the file. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Enqueue' hints at asynchronous queuing, but nothing is said about whether the peer must be online, whether queuing is idempotent, how failures surface, or what happens to an already-queued file — all material for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero filler and no redundancy. It is efficient, though the terseness edges into under-specification for a multi-step workflow rather than wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the schema fully covers inputs. What is missing is the prerequisite workflow context (search/browse first) and any behavioral caveats, leaving the definition minimally viable rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (username, filename, size) is already documented in the schema, including the note that size comes from search results. The description adds no parameter meaning beyond that, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Enqueue a file ... for download') and adds scope ('from a specific user'), which is enough to separate it from slskd_cancel_download and slskd_search. It never names a sibling or the discovery step that must precede it, so sibling differentiation is only implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, no alternatives. The critical workflow fact — that the filename must come from a prior slskd_search or slskd_browse_user call — appears only in the schema's parameter description, not in the tool description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slskd_get_transfersSlskd Get TransfersA
List current downloads or uploads with speeds, bytes transferred, queue position, and status.
| Name | Required | Description | Default |
|---|---|---|---|
| direction | No | Transfer direction to query, either 'downloads' (default) or 'uploads'. | downloads |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It discloses the returned fields and the 'current' (live snapshot) nature of the data, which implies a read-only listing, but says nothing about auth requirements, pagination, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with zero filler; every clause (fields returned) earns its place and nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-optional-parameter listing tool with an output schema, the description is sufficient — return values need not be explained. Only the missing usage/alternative guidance keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single param's enum-like values ('downloads'/'uploads') plus default are fully documented in the schema. The description's phrase 'downloads or uploads' merely echoes the schema without adding format or default guidance, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('current downloads or uploads') and enumerates what each entry contains (speeds, bytes transferred, queue position, status). An agent can distinguish this from siblings like slskd_status or slskd_search without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the content description — you call it to inspect in-flight transfers — but the description never states when to prefer it over slskd_status or slskd_download, nor any exclusions. No explicit alternative routing is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slskd_searchSlskd SearchA
Search the Soulseek network for music files, albums, or artists.
Polls until responses arrive or timeout expires. Filters and ranks matches prioritizing peers with open upload slots, shorter queues, and higher speeds.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search string (e.g. 'Aphex Twin Selected Ambient Works' or 'Sewerslvt'). | |
| max_results | No | Maximum number of ranked file results to return (default: 50). | |
| min_bitrate | No | Minimum bitrate in kbps for audio files (e.g. 320). Lossless files are preserved. | |
| format_filter | No | Optional file extension filter (e.g. 'flac', 'mp3', 'wav'). | |
| timeout_seconds | No | Search duration in seconds (default: 15, minimum: 5). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose non-obvious traits: it polls until responses arrive or the timeout expires, and it filters/ranks results by upload slots, queue length, and speed. It omits rate-limit or network-exposure considerations, but the ranking and polling disclosure is genuinely valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, followed by essential behavioral detail. No filler and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the description covers polling, filtering, and ranking adequately. The absence of annotations leaves the safety/permission profile entirely unstated, which is a minor gap for a read-like network search.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the schema. The description adds no syntax or format detail beyond that, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (Soulseek network for music files, albums, artists), which is unambiguous. It does not explicitly differentiate itself from siblings like slskd_browse_user, though the network-wide scope implies the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied — an agent would search before calling slskd_download — but the description never states when to use this versus slskd_browse_user, nor any prerequisites or when not to search. No explicit routing guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slskd_statusSlskd StatusA
Check slskd connection to Soulseek, connected peers, and transfer stats.
Returns: Summary object containing: connected: Soulseek server connection state (boolean) logged_in: Soulseek login state (boolean) username: Logged-in Soulseek username version: slskd daemon version string upload_speed: Average upload speed (bytes/sec) download_speed: Current download speed (bytes/sec) peer_count: Number of connected peers shares_directories: Shared directory count shares_files: Shared file count server_address: Soulseek server IP and port
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Check' implies a read-only operation and the return summary clarifies the output, but it does not state permission requirements, rate limits, or explicitly confirm that no state is modified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear purpose, but the lengthy enumeration of return fields is redundant because an output schema already exists. It remains readable but could be trimmed without losing necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter status tool with an output schema, the description is complete enough for an agent to call it correctly. The main gap is the absence of explicit usage guidance relative to sibling tools, though the diagnostic purpose is obvious.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics to document. Baseline for zero parameters is 4, and the empty schema is consistent with the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Check) and resource (slskd connection to Soulseek, connected peers, and transfer stats). It is clearly distinct from sibling tools such as slskd_search, slskd_download, and slskd_get_transfers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose implies a diagnostic/status use case, but the description does not explicitly say when to use this tool versus alternatives or when not to use it. No alternatives are named, so usage must be inferred from the tool name and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
slskd_browse_user - First observed
slskd_cancel_download - First observed
slskd_download - First observed
slskd_get_transfers - First observed
slskd_search - First observed
slskd_status
TDQS
Scored across 6 tools
Each tool targets a clearly distinct action or resource: status for connection health, search for network-wide discovery, browse_user for peer share inspection, download for enqueueing, get_transfers for monitoring, and cancel_download for removal. The slight thematic overlap between status and get_transfers is resolved by status returning summary stats while get_transfers returns per-transfer details.
All names use the same slskd_ prefix and snake_case, which is highly consistent. However, the base patterns vary: some are verb_noun (get_transfers, cancel_download, browse_user), while others are simple verbs (search, download) or a noun (status), making the set mostly but not perfectly uniform.
Six tools is well-scoped for a focused Soulseek client wrapper, covering the core workflow from status check to search, browse, download, monitor, and cancel. No tool feels redundant or out of place, and the count avoids both thinness and bloat.
The surface covers the primary lifecycle: connection status, searching, browsing peers, enqueueing downloads, listing transfers, and cancelling transfers. Minor gaps exist, such as no dedicated tool for clearing completed transfers or managing uploads/shares, but agents can work around these with the current set.
Maintenance
Related MCP Connectors
The media memory layer for AI agents and their humans. Your AI client gets 29 tools to search your collection, add items, update ratings, preview music, and find patterns across everything you've read, watched, and listened to.
AI Agent Source Registry. 288K+ curated sources for agentic search and discovery.
CC0 sound effects API for AI agents — search, preview, and download via MCP.
AI music and podcast platform for autonomous agents. SoundCloud for AI bots.
Related MCP Servers
- FlicenseBqualityNot gradedmaintenanceEnables Claude to search and download music files from the Soulseek peer-to-peer network using a Soulseek account.3-
- FlicenseNot gradedqualityBmaintenanceEnables interaction with the Soulseek peer-to-peer file sharing network for searching files, browsing user shares, and managing downloads. Supports chat functionality including public rooms, private messages, and user monitoring.-
- FlicenseAqualityDmaintenanceMCP server for searching and downloading music from the Soulseek peer-to-peer network via slskd. Enables AI assistants to discover and download music directly.5-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that gives AI agents full control over slskd, a modern Soulseek client, enabling search, download, browse peers, monitor transfers, and manage the slskd instance.1MIT