Listening Companion
Provides read-only integration with a SoundCloud account, allowing users to view recent plays, liked tracks and playlists, personal playlists, followed users and their tracks, search tracks/playlists/users, resolve SoundCloud URLs, fetch track and playlist details, discover related tracks, and generate local rule-based recommendations and podcast classifications.
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., "@Listening CompanionShow me recommendations based on my liked tracks"
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.
Listening Companion
Listening Companion は、SoundCloud アカウントに接続して、曲やプレイリストなどを読み取り専用で探したり、おすすめを出したりするためのローカル Python アプリです。
現時点では、1人で使うことを前提とした MVP(最小限の実用版)です。Codex プラグインとして動作し、依存ライブラリなしの MCP JSON-RPC stdio サーバーと、ローカルブラウザで結果を見るためのビューアーを備えています。
アプリ上の表示名は Listening Companion です。
内部では互換性維持のため soundcloud-recommender というパッケージ名・プラグイン名を使っていますが、これはユーザー向けの製品名ではありません。
現在できること
以下の機能を実装しています。
SoundCloud アカウントへの OAuth 2.1 認証
最近再生した曲の取得
いいねした曲・プレイリストの取得
自分のプレイリストの取得
フォロー中ユーザーや、そのユーザーの曲の取得
曲・プレイリスト・ユーザーの検索
SoundCloud URL からリソースを取得
曲・プレイリストの詳細取得
プレイリスト内の曲の取得
関連楽曲の取得
ポッドキャストの簡易分類
ローカルルールによるおすすめ生成
好みの保存・削除
認証なしで試せるデモモード
OAuth 認証では、S256 PKCE、state の有効期限、リプレイ攻撃対策、リフレッシュトークンのローテーションなどを実装しています。
アクセストークンとリフレッシュトークンは、基本的にアプリを起動している間だけメモリ上に保持します。
切断またはアプリ終了時に削除されます。
トークンを平文ファイルへ保存する機能はなく、MCP ツールの結果としてトークンを返したり、ログへ出力したりすることもありません。
Related MCP server: SoundCloud MCP
SoundCloud API について
SoundCloud API へのアクセスは、許可したエンドポイントだけに限定しています。
また、API 通信は GET リクエストのみです。
主に以下を利用します。
/me最近再生した曲
いいね
プレイリスト
フォロー
検索
/resolve曲・プレイリストなどの詳細
プレイリスト内の曲
関連楽曲
SoundCloud 側へ書き込みを行う機能はありません。
ローカルビューアー
SoundCloud から取得した情報は、MCP を通してそのままモデルへ渡すのではなく、ローカルブラウザ上のビューアーで確認する仕組みになっています。
取得結果は、期限付きのインメモリキャッシュに一時的に保存されます。
SoundCloud から取得したコンテンツを SQLite やアーカイブへ保存することはありません。
ビューアーでは HTML エスケープを行い、SoundCloud へのリンクも表示して、適切に出典を確認できるようにしています。
おすすめ機能について
おすすめやポッドキャスト分類は、完全にローカルで動作するルールベース方式です。
以下の処理は行いません。
Embedding API の利用
AI モデルへの問い合わせ
音声ファイルのダウンロード
ストリーム音声の保存
ファインチューニング
つまり、曲のメタデータをもとに、決められたルールで分類やランキングを行います。
好みの保存
必要であれば、SQLite に preference_profile を保存できます。
ただし、保存はユーザーが明示的に許可した場合のみです。
保存できるのは、例えば以下のような情報に限定されています。
好きなジャンル
興味のあるポッドキャストの話題
言語
好きなクリエイター
避けたいキーワード
好みの曲の長さ
新しい曲をどれくらい積極的に探したいか
以下は保存しません。
会話内容
AI のメモリ一覧
SoundCloud API の生レスポンス
再生履歴そのもの
一時的に渡した好みは、save_preferences を consent: true 付きで明示的に実行しない限り保存されません。
重要:SoundCloud のデータをモデルへ直接渡さない
ライブ環境では、MCP から返すデータを意図的に最小限にしています。
例えば以下のような結果だけを返します。
{
"status": "ok",
"result_id": "opaque-random-id",
"count": 5,
"viewer_url": "http://127.0.0.1:8765/view/opaque-random-id?token=opaque-capability",
"expires_in_seconds": 600,
"warnings": []
}モデル側へ返されるのは、
処理結果
結果ID
件数
ローカルビューアーのURL
有効期限
警告
など、Listening Companion 側で生成した情報だけです。
以下のような SoundCloud のデータは、ライブ環境ではモデル側へ直接渡しません。
曲名
アーティスト名
曲の説明
SoundCloud URL
SoundCloud API の生データ
これらは、ローカルビューアーを開いたユーザー本人だけが確認できます。
なお、デモモードでは仕組みを理解しやすくするため、架空のテストデータをそのまま返す場合があります。
セキュリティ上の注意
ローカルビューアーでは、
ランダムな capability token
短時間だけ有効なインメモリデータ
HttpOnlyCookieSameSite=StrictCookie
などを使用しています。
デフォルトでは 127.0.0.1 のみに接続します。
このビューアーはあくまでローカル利用向けの簡易的な仕組みです。
本番環境向けの認証システムではありません。
そのため、LAN やインターネット上へ公開しないでください。
認証情報なしで試す
まずはデモモードで動作確認できます。
この README があるプラグインのルートディレクトリで実行してください。
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -e ".[dev]"
python -m pytest
python scripts/validate_local.py
python scripts/run_mcp.py --demoデモサーバーは stdout を使って MCP 通信を行います。
stdout へログを出さないため、そのまま MCP ホストへ接続できます。
通常は NDJSON(1行ごとに JSON を送る形式)を使用します。
Content-Length 形式が必要な MCP ホストでは、以下を指定してください。
--framing content-length環境変数の設定
.env.example は設定例です。
Listening Companion 自体は .env ファイルを自動では読み込みません。
ローカルで実行する場合は、例えば次のようにします。
cp .env.example .env.local.env.local の内容を編集したら、そのシェルへ読み込みます。
set -a
. ./.env.local
set +a
python scripts/run_mcp.py.env.local は Git などへコミットしないようにしてください。
GUI アプリから MCP サーバーを起動する場合、そのアプリを起動した時点の環境変数が使われます。
そのため、認証情報を追加・変更した場合は、MCP ホストを再起動してください。
ホスト側が環境変数の再読み込みに対応している場合は、プラグインの再読み込みでも構いません。
実際の SoundCloud アカウントへ接続する
1. SoundCloud API アプリを登録する
現在の SoundCloud の開発者向け手順に従って、API アプリケーションを登録します。
現在の SoundCloud の案内では、API アプリ登録に Artist Pro が必要になる場合があります。
クライアントIDやセキュリティコードは必ず秘密にしてください。
プラグインのコードやチャットへ貼り付けないでください。
2. 環境変数を設定する
.env.example をコピーし、認証情報を設定します。
SOUNDCLOUD_SCOPE は、SoundCloud から利用可能な scope が明示されていない限り空のままにしてください。
Listening Companion 側で独自の scope を勝手に指定することはありません。
3. リダイレクトURIを登録する
LISTENING_COMPANION_REDIRECT_URI に指定した URI を、SoundCloud 側にも完全に同じ文字列で登録してください。
4. MCP サーバーを起動する
python scripts/run_mcp.pyデフォルトでは、
127.0.0.1:8765でローカルビューアーが起動します。
その後、connect_account を実行します。
返された viewer_url をブラウザで開くと SoundCloud の認証画面へ移動し、認証完了後にローカルページへ戻ります。
5. MCP ツールを使う
接続後は、各種読み取り専用ツールを利用できます。
SoundCloud のデータを確認したい場合は、ツールの結果として返された viewer_url をブラウザで開いてください。
connect_account の結果が、
configuration_requiredまたは
authorization_requiredになることがあります。
これはエラーをごまかしているわけではありません。
有効な認証情報や認証操作がなければ、Listening Companion が勝手に SoundCloud アカウントへ接続することはありません。
利用できる MCP ツール
現在、以下のツールを提供しています。
connection_status
connect_account
disconnect_account
get_profile
recent_plays
liked_tracks
liked_playlists
my_playlists
followings
following_tracks
search_tracks
search_playlists
search_users
resolve_resource
get_track
get_playlist
playlist_tracks
related_tracks
classify_podcasts
recommend
get_preferences
save_preferences
delete_preferences
demo_catalogAPI取得時の細かい仕様
一覧データには件数制限付きのページネーションを使用します。
最近再生した曲については、現在の SoundCloud API の仕様に合わせて最大25件まで取得します。
一般的なコレクションでは、
limit
linked_partitioningを使用します。
フォロー中ユーザーの楽曲取得では、
limit
offsetを使用します。
SoundCloud API から返される next_href をそのまま信用することはありません。
接続先が許可された SoundCloud API ホストであることを検証した場合のみ、次のページへアクセスします。
/resolve が HTTP 302 リダイレクトを返した場合も、リダイレクト先を検証してからアクセスします。
関連楽曲は以下の API を使用します。
/tracks/{urn}/relatedrecommend では、複数の情報源をそれぞれ独立して取得します。
一部の情報源を取得できなかった場合でも、取得できた情報だけで結果を返し、警告を表示します。
テスト
以下のコマンドでテストできます。
python -m pytest
python scripts/validate_local.py
python <path-to-plugin-creator>/scripts/validate_plugin.py .テストでは実際の SoundCloud API にはアクセスしません。
モック HTTP 通信と一時的なローカルストレージを使います。
主に以下を確認しています。
OAuth state の再利用防止
OAuth state の有効期限
PKCE
リフレッシュトークンのローテーション
接続先の許可リスト
リダイレクト先の検証
API データの正規化
キャッシュの有効期限
好み保存時の同意確認
おすすめランキングの再現性
ポッドキャスト分類
MCP のフレーミング
MCP スキーマエラー
SoundCloud データがモデル側へ漏れないこと
SoundCloud の利用規約について
このプロジェクトは、あくまで実装のための試作・雛形です。
このコードが存在するからといって、SoundCloud との正式な連携サービスとして運用する許可が得られるわけではありません。
現在の SoundCloud API Terms of Use では、API から取得したデータは User Content として扱われます。
また、以下のような制限があります。
User Content を AI 技術への入力として使用することへの制限
User Content を永続的にキャッシュすることへの制限
SoundCloud への帰属表示やリンクの要求
個人情報を扱う場合のプライバシーポリシー要求
SoundCloud の商標をアプリ名として使うことの禁止
そのため Listening Companion では、できるだけ規約に配慮して以下の設計にしています。
おすすめ処理はローカルのルールベース方式
SoundCloud のデータは一時的なメモリ上だけに保持
SoundCloud のメタデータをモデルへ直接渡さない
SoundCloud の曲名やリンクはローカルビューアーでのみ表示
アプリ名には SoundCloud の名称を使わず
Listening Companionとする
ただし、これだけで法的・契約上の問題がすべて解決するわけではありません。
実際に公開・運用する前には、最新の SoundCloud 利用規約を確認し、必要な権利処理を行う必要があります。
MCP プラグインとしての位置づけ
ローカル MCP の設定は、なるべく一般的で保守的な構成にしています。
.mcp.json では主に、
command
args
cwd
env
env_varsを使用します。
ただし、以下についてはこのプロジェクトでは正式な動作保証をしていません。
MCP ホストごとのインストール方法
Python のパス設定
リモート HTTPS MCP の認証
また、このプロジェクトは ChatGPT Web へ直接接続するリモート MCP サービスではありません。
Web サイトをホスティングする機能もありません。
インターネット上で利用できる本番用 MCP サーバーにする場合は、別途以下が必要です。
サーバーのホスティング
ユーザー認証
データ保護・プライバシーの確認
SoundCloud 関連の権利確認
このリポジトリ単体では、外部へのデプロイは行いません。
ファイル構成
src/soundcloud_recommender/
cache.py
SoundCloudの取得結果やカーソルを一時保存するTTLキャッシュ
classifier.py
メタデータだけを使ったポッドキャスト判定
cli.py
ローカルCLIのエントリーポイント
config.py
環境変数や各種制限の設定
http.py
接続先を制限したHTTP通信処理
mcp_stdio.py
MCP JSON-RPC stdioサーバー本体
models.py
内部データモデルと公開結果モデル
oauth.py
PKCE、OAuth callback、トークン管理
preferences.py
ユーザーが許可した好みをSQLiteへ保存
recommender.py
ローカルで動作するおすすめランキング
service.py
各操作の実装と、モデルへ渡す情報の境界管理
viewer.py
ローカルブラウザで結果を見るためのビューアーAvailable Tools
24 toolsclassify_podcastsBRead-onlyIdempotent
Classify a prior local result, or classify explicitly synthetic fixture items.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | ||
| result_id | No | ||
| synthetic | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already clarify read-only, idempotent, non-destructive behavior, and the description does not contradict that. It adds a behavioral boundary: classification applies to 'prior local result' or 'synthetic fixture items' rather than arbitrary remote input. It does not go further to explain output, limits, or side effects, but the annotation coverage lowers the burden.
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 a single compact sentence that front-loads the verb and primary resource. Every word contributes to disambiguating the two mutually exclusive input modes. There is no redundant phrasing or filler.
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?
The tool has a non-trivial anyOf schema, no output schema, and a very short description. The agent still cannot reliably decide what inputs to provide for 'items' or what classification result to expect. The description creates new concepts ('prior local result', 'fixture items') without defining them, leaving significant gaps for a tool that is not self-explanatory.
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?
With 0% schema description coverage, the description must carry meaning. It does map the two input modes to the parameters: 'prior local result' corresponds to result_id, and 'synthetic fixture items' correspond to items plus the synthetic flag. However, it does not describe the shape of objects in 'items', the type of 'result_id', or what makes an item 'synthetic', so the compensation is only partial.
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 uses a specific verb ('classify') and identifies both input modes: a prior local result or explicit synthetic fixture items. It distinguishes between these two legitimate use cases using 'or', and the name is not echoed. The term 'prior local result' is somewhat vague but the resource is clear enough for an agent to know this is for classification, not a sibling.
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 description implies when to use the tool: when you have a prior local result (result_id) or synthetic items. However, it does not mention alternatives, exclusions, or prerequisites (e.g., what qualifies as a 'prior local result' or how to populate synthetic items). There is no competing classify tool among siblings, so the ambiguity is less severe, but explicit guidance is still missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_accountA
Create a short-lived local browser authorization receipt; never returns a token.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no useful hints (all false), so the description must carry behavioral disclosure. It does disclose that the receipt is short-lived and that a token is never returned, which is valuable behavioral context. However, it does not mention potential side effects like requiring user interaction in the browser or whether the receipt is stored.
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 extremely concise, using a single sentence with two clauses. The primary action is front-loaded ('Create...'), followed by a critical behavioral note. No redundant words or filler.
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?
While the core function is clear, the description lacks essential context about the expected flow: it does not mention that browser interaction may be needed to complete authorization, how the receipt is used, or what the agent should expect as a follow-up. Given that there is no output schema and no annotations, the description could be more informative about the overall behavior.
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?
With zero parameters, the baseline is 4. The description successfully explains the tool's purpose without needing to elaborate on any input semantics. The empty schema needs no additional clarifications.
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 clearly states a specific verb ('Create') and resource ('local browser authorization receipt'), and explicitly notes it never returns a token. This distinguishes it from sibling tools like connection_status or disconnect_account by focusing on the connection initiation action.
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 guidance on when to use this tool or when not to. It does not mention alternatives or provide context for choosing this over other account-related tools (e.g., disconnect_account). The description is purely declarative and leaves usage decisions to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connection_statusARead-onlyIdempotent
Return local connection state without provider metadata or tokens.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, covering the safety profile. The description adds value by specifying that the returned state is local and excludes provider metadata or tokens, which clarifies what the response does and does not contain. This goes beyond the annotations and is useful context for an agent.
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 a single, tight sentence that front-loads the core purpose and scoping constraints. Every word earns its place with no fluff or repetition.
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, read-only status tool, the description covers the main purpose and scope. However, it does not specify the exact return format (e.g., boolean or string) or any edge cases like whether it returns an error if no provider is connected. With no output schema, a slightly more explicit return description would make it 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?
The tool has zero parameters, so the schema is fully covered (100%) with nothing to describe. The baseline for no parameters is 4, and the description adds no parameter details because none are needed. No deduction is warranted.
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 clearly states a specific verb ('Return') and resource ('local connection state'), and adds distinguishing scope by excluding provider metadata or tokens. This differentiates it from sibling tools like connect_account and disconnect_account, which are about changing state rather than reporting it.
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 description implies this tool is for checking connection status, but it does not explicitly state when to use it versus alternatives (e.g., 'use this to verify connection before calling connect_account'). No exclusions or prerequisites are mentioned, leaving usage context to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_preferencesADestructiveIdempotent
Delete the saved preference_profile.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true. The description adds no extra behavioral context beyond the annotation, such as whether deletion is permanent or if there is any confirmation. Given the annotations carry the safety profile, the description doesn't need to repeat it, but it also doesn't enrich it. This is adequate for a trivial operation.
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 no filler. The description is appropriately brief for a parameterless tool. Every word contributes to the meaning, and it is front-loaded with the verb and object.
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 destructive operation, the description is complete. The annotation provides the destructive nature, and the description identifies the target. No return value is specified, but with no output schema, that is acceptable. It could mention that the action is irreversible, but the destructiveHint already covers that.
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 has zero parameters, and the input schema is empty. With 100% schema coverage and no parameters, the baseline is 4. The description doesn't need to explain parameters because there are none; this score reflects that the schema fully defines the interface.
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?
Clearly states the action (Delete) and the target resource (the saved preference_profile). This distinguishes it from siblings like get_preferences and save_preferences, which are read/write operations. The one-sentence description leaves no ambiguity about what the tool does.
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 description implies the tool is to be used when the agent wants to remove the saved preference_profile, but it does not explicitly mention alternative tools or when-not-to-use cases. For a simple destructive operation, the lack of explicit exclusions is acceptable, but it could have clarified that this is the inverse of save_preferences.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
demo_catalogARead-onlyIdempotent
Return synthetic fixture metadata for local testing; it never contacts SoundCloud.
| Name | Required | Description | Default |
|---|---|---|---|
| content_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds the critical behavioral fact that it never contacts SoundCloud, which is not in the annotations and is essential for an agent to know it won't incur network costs or hit real data. It also clarifies the data is synthetic, which is useful context. This adds value beyond the structured metadata.
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 a single, compact sentence that front-loads the core purpose and the key behavioral constraint ('never contacts SoundCloud'). Every word earns its place; there is no fluff or redundancy. It is optimally sized for quick agent parsing.
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 tool with one optional enum parameter, no output schema, and strong annotations covering safety, the description is fully complete. It explains the purpose, the synthetic nature of data, and the no-network behavior. There is nothing an agent needs to correctly invoke this tool that is missing. The only minor gap is the parameter's effect, but the enum values are self-explanatory and the parameter is optional, so this does not undermine completeness.
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 schema description coverage is 0%, and the tool description does not mention the content_type parameter at all. While the parameter is self-explanatory via its enum (music/podcast/mixed), the description does not clarify how this parameter affects the returned fixtures (e.g., whether it filters the fixture type). Since the schema lacks descriptions, the description should compensate, but it does not. This leaves the agent to infer the parameter's effect, a notable gap.
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 ('return'), a resource ('synthetic fixture metadata'), and its purpose ('for local testing'). It explicitly distinguishes itself from real API calls by adding 'it never contacts SoundCloud,' which sets it apart from the many sibling tools that do interact with the API. This is a clear, unambiguous purpose.
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 description clearly indicates when to use this tool: for local testing, when you need synthetic data. It also implicitly signals when not to use it (when you need real data) by stating it never contacts SoundCloud. However, it does not explicitly name alternatives or provide explicit 'use this instead of X' guidance, so it misses the highest tier of explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnect_accountADestructiveIdempotent
Clear local tokens and all in-memory provider/result/cursor state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds specificity about what is cleared (local tokens and in-memory state) and clarifies the scope is local, implying no server-side changes. This goes beyond the annotations and is useful for understanding side effects.
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 a single, well-structured sentence that conveys all necessary information with zero redundancy. It is front-loaded with the action and resource.
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?
Given the tool has no parameters, no output schema, and annotations already cover destructive and idempotent behavior, the description is fully complete for an agent to understand what the tool does and when to call it. No additional context is needed.
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?
With zero parameters, the baseline is 4. The description does not need to explain parameters, and the schema is empty. The description adequately conveys the tool's purpose without any parameter ambiguity.
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 uses the specific verb 'Clear' and identifies the exact resources (local tokens and in-memory provider/result/cursor state), which clearly distinguishes this from siblings like connect_account and connection_status. The purpose is unambiguous.
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 description implies usage for disconnecting an account but does not explicitly state when to use this versus alternatives like connection_status or connect_account. The context of siblings and the name make it fairly obvious, but there is no explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
followingsCRead-onlyIdempotent
Fetch followed users into an expiring local viewer receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds a behavioral hint about an 'expiring local viewer receipt,' but it is vague and does not clarify expiration semantics, return format, or pagination behavior. No contradiction with annotations is present.
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 a single sentence and leads with the primary action and resource, which is appropriately front-loaded. The cryptic 'expiring local viewer receipt' phrase reduces clarity but not size or organization; there is no redundant filler.
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?
With no output schema and no parameter documentation, the description should explain what the tool returns and how to use limit/cursor. It does neither. The 'receipt' wording hints at a return artifact but not its structure, lifetime, or pagination behavior, leaving an agent under-informed for a straightforward list endpoint.
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 0%, and the description does not mention limit or cursor at all. Since the schema provides only types and constraints—not semantic meaning—the description was supposed to compensate but does not. An agent gets no help understanding pagination or how these parameters interact.
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 core action and resource are clear: 'Fetch followed users.' This distinguishes it from sibling tools like following_tracks and liked_tracks. However, the appended phrase 'into an expiring local viewer receipt' is opaque and adds ambiguity to what the tool actually produces.
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 guidance is given about when to use this tool versus alternatives such as following_tracks, get_profile, or connection_status. There are no exclusions, prerequisites, or explicit routing hints. The intended context must be inferred entirely from the tool name and the one-line description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
following_tracksARead-onlyIdempotent
Fetch followed-user tracks with limit and offset; this endpoint does not use linked_partitioning.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds one useful behavioral detail: the endpoint does not use linked_partitioning, implying plain offset pagination. However, it does not disclose response shape or pagination defaults.
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 a single, front-loaded sentence with no filler. It communicates the action, the pagination parameters, and a meaningful technical caveat efficiently.
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?
The definition is adequate for basic invocation, especially with annotations covering safety and schema covering bounds. However, with no output schema and no sibling differentiation, an agent is left uncertain about the return format and when to prefer this over related tools.
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 0%, so the description must compensate. It names both limit and offset and clarifies that offset is a plain offset by noting the absence of linked_partitioning. The conventional parameter names plus schema constraints make the semantics reasonably clear.
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 and resource: 'Fetch followed-user tracks', which clearly distinguishes this from sibling tools like followings, liked_tracks, and recent_plays. The mention of limit and offset further clarifies the operation's paginated scope.
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 guidance is provided about when to use this tool versus alternatives such as followings or liked_tracks. The linked_partitioning caveat is a technical behavior note, not a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlistBRead-onlyIdempotent
Fetch a playlist by numeric ID or canonical soundcloud:playlists:... reference.
| Name | Required | Description | Default |
|---|---|---|---|
| reference | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is read-only, idempotent, and non-destructive, so the main safety behavior is covered. The description adds the accepted reference formats but does not disclose failure behavior, authentication requirements, or what the response contains. This is acceptable for a simple fetch but not rich behavioral context.
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 entire description is one concise sentence that front-loads the operation and then specifies the accepted input forms. No filler or redundant wording is present.
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?
The description is sufficient for a basic single-parameter read-only fetch, and the annotations cover idempotence and safety. However, there is no output schema, and the description does not indicate the response shape, error behavior, or how this tool relates to resolve_resource and get_track, leaving some contextual gaps for an agent.
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 schema provides no description for the 'reference' parameter, so the description carries the documentation burden. It successfully explains that the parameter accepts either a numeric ID or a canonical soundcloud:playlists:... reference, which is essential and not inferable from the schema alone. Some ambiguity remains around the exact canonical format.
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 clearly states the operation ('Fetch a playlist') and the target resource, and specifies the accepted reference kinds. It does not explicitly distinguish itself from sibling tools like get_track or resolve_resource, but the resource name makes the intended purpose easy to identify.
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 description gives no guidance about when to prefer get_playlist over alternatives such as resolve_resource, get_track, or playlist_tracks. It does not state exclusions or conditions, such as needing a numeric ID or canonical reference versus an arbitrary URL.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_preferencesARead-onlyIdempotent
Read the explicitly saved minimal preference_profile only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is clear. The description adds useful context by specifying that it reads only the explicitly saved minimal preference_profile, implying no computed defaults or full-profile data are returned.
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 filler. Every word adds meaning, and the key scoping constraint ('only') is placed at the end for emphasis.
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, read-only getter with no output schema, the description covers the essential scope. It could be slightly fuller by stating what happens when nothing has been explicitly saved, but the 'explicitly saved' phrasing implies that possibility.
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?
There are zero parameters and schema coverage is 100%, so the schema carries no burden. The baseline for 0 parameters is 4; the description correctly identifies what is being read without needing to explain parameters.
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 uses a specific verb ('Read') and names the exact resource ('explicitly saved minimal preference_profile'). The word 'only' communicates scope and distinguishes this from the broader get_profile sibling, so an agent can tell them apart without opening schemas.
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 explicit when-to-use or alternatives are named, but the description implies this is for reading the saved minimal preference profile rather than other profile data. The 'only' scope gives some signal, but there is no direct comparison to get_profile or save_preferences.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_profileBRead-onlyIdempotent
Fetch the authenticated profile into an expiring local viewer receipt.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, so the description adds less critical context. It introduces an 'expiring local viewer receipt' detail hinting at ephemerality, but does not explain the expiration mechanism or consumption semantics. No contradiction with annotations.
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 a single compact sentence with no wasted words. The phrase 'expiring local viewer receipt' is conceptually dense but not verbose.
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 no-parameter read-only tool, the description is mostly sufficient. However, with no output schema, the unexplained 'viewer receipt' leaves uncertainty about what data the agent will receive, and it never clarifies whether an existing authenticated connection is required.
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 has zero parameters and an empty schema with 100% coverage, so the description has no parameter details to add. The baseline of 4 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?
The description uses a specific verb ('Fetch') and identifies the resource ('authenticated profile'), which distinguishes it from sibling tools. However, the phrase 'into an expiring local viewer receipt' is opaque and may obscure the actual return value.
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 guidance is given about when to use get_profile versus alternatives such as connection_status or connect_account. An agent must infer applicability from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trackARead-onlyIdempotent
Fetch a track by numeric ID or canonical soundcloud:tracks:... reference.
| Name | Required | Description | Default |
|---|---|---|---|
| reference | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond the fetch operation itself, such as error handling or rate limits. It does not contradict annotations, but it also does not enrich them. Given the low bar set by strong annotations, a 3 is appropriate.
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 starts with the action, states the resource, and specifies the parameter format. This is exemplary conciseness.
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 fetch-by-reference tool with read-only annotations, the description covers the essential input format. It does not mention the return structure, but no output schema exists, and the tool name implies a track object. Given the low complexity and strong annotation coverage, the description is complete enough for correct invocation, though a note on error handling or not-found behavior would push it to 5.
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 schema only defines 'reference' as a string with length constraints, with 0% schema description coverage. The description compensates fully by explaining that the reference can be a numeric ID or a canonical soundcloud:tracks:... reference, giving the agent concrete guidance on what values to provide. This is exactly the kind of meaning the description should add.
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 clearly states the verb 'Fetch', the resource 'track', and the two accepted forms of the reference parameter (numeric ID or canonical soundcloud:tracks:...). This is specific and distinguishes it from sibling tools like get_playlist, which fetches a playlist, and search_tracks, which searches. The purpose is unambiguous.
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 guidance is given on when to use this tool versus alternatives such as resolve_resource or search_tracks. It does not state when to prefer get_track over a search or a general resolver, nor does it mention any exclusions or prerequisites. The agent must infer usage from the description alone, which is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
liked_playlistsCRead-onlyIdempotent
Fetch liked playlists into an expiring local viewer receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the 'expiring local viewer receipt' notion, which hints at a non-obvious return behavior, but does not explain what the receipt contains, how it expires, or how the agent should handle it.
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 a single sentence with no filler, and the main verb/resource is front-loaded. However, the phrase 'expiring local viewer receipt' is jargon that obscures meaning rather than clarifying it, reducing the value of the conciseness.
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 two optional pagination-related parameters and no output schema, the description is incomplete. It fails to explain cursor/limit semantics, the meaning of the receipt, or how this relates to sibling playlist tools.
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 0%, and the description does not mention the limit or cursor parameters at all. The schema only provides basic constraints (min/max lengths, min/max values), so the agent gets no semantic guidance on pagination or how these parameters affect the result.
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 uses a specific verb and resource ('Fetch liked playlists'), making the core action clear. However, it does not differentiate from siblings like liked_tracks or my_playlists, and the phrase 'expiring local viewer receipt' is vague and unexplained.
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 guidance on when to use this tool versus alternatives such as my_playlists or liked_tracks. No context, prerequisites, or exclusions are provided, leaving the agent to infer the appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
liked_tracksARead-onlyIdempotent
Fetch liked tracks into an expiring local viewer receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: the result is an 'expiring local viewer receipt', which signals that the fetched data is not a persistent resource and may be temporary. This is useful and non-obvious.
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 sentence that is concise and front-loaded with the core action ('Fetch liked tracks') followed by the key behavioral nuance ('expiring local viewer receipt'). No 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?
For a simple read-only paginated fetch with no output schema, the description is mostly adequate, but it does not mention pagination behavior or what the 'receipt' contains. The expiring-receipt concept is intriguing but under-specified; an agent may not know how to interpret the result or whether the cursor is needed for subsequent calls.
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 0%, so the description carries the burden, but it does not explain the limit or cursor parameters. However, the parameter names are self-explanatory (limit for pagination size, cursor for pagination token), and the schema provides constraints. The description adds no parameter-specific meaning, so a baseline 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?
The description uses a specific verb ('Fetch') and resource ('liked tracks'), and adds a distinctive outcome ('expiring local viewer receipt') that hints at a non-standard return. It is clear enough to distinguish from siblings like liked_playlists or recent_plays, though it does not explicitly name any sibling.
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 phrase 'expiring local viewer receipt' implies a temporary, viewer-scoped result, which gives some context for when to use it, but there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives. The agent must infer usage from the description and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
my_playlistsCRead-onlyIdempotent
Fetch the user's playlists into an expiring local viewer receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, which cover the safety profile. The phrase 'expiring local viewer receipt' does attempt to add a behavioral trait beyond those annotations, but it is ambiguous about what actually expires and what 'receipt' means. It gives minimal extra transparency, not enough for a clear understanding.
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 sentence is short and front-loads the core verb and resource, which is structurally efficient. However, the 'expiring local viewer receipt' tail is confusing and does not earn its place, so the conciseness contributes to ambiguity rather than clarity.
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?
With no output schema and 0% parameter schema coverage, the description carries the responsibility for explaining behavior and result semantics. It omits pagination meaning, return value/format, and any differentiation from the similar playlist-related siblings. Some context is provided by the annotations, but not enough for complete tool selection and invocation.
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 schema has 0% description coverage, so the description needs to compensate for the undocumented 'limit' and 'cursor' parameters. It does not mention either parameter at all, leaving their meaning, relationship to pagination, and defaults unresolved. This is a full gap in parameter semantics.
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 names a specific resource ('the user's playlists') and a clear base action ('Fetch'), so the agent gets the gist. However, the qualifier 'into an expiring local viewer receipt' is opaque and does not explain what a 'viewer receipt' is or how this differs from the similarly named sibling liked_playlists. It is too jaggy to fully clarify intent.
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 guidance about when to use this tool versus alternatives like liked_playlists or playlist_tracks, which are present in the sibling list. The description only states what it does, not when or why it should be chosen. No exclusions, prerequisites, or context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
playlist_tracksBRead-onlyIdempotent
Fetch playlist tracks with bounded pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| reference | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds bounded pagination, which is a useful behavioral trait—it tells the agent results are limited and a cursor is expected. This is credible context beyond the annotations, though not rich.
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 filler. 'Fetch playlist tracks' states the core operation and 'bounded pagination' adjoins behavior in just six words. Nothing extraneous is present.
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?
There is no output schema and no per-parameter descriptions, so the description must supply return-shape and pagination context. It does not describe the cursor mechanism, the shape of a track, or how an agent should page through results, leaving a significant gap for a 3-parameter list endpoint.
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 schema has 0% description coverage, so the description carries the burden of explaining parameters. It hints that `reference` points to a playlist and that `limit`/`cursor` handle pagination, but it fails to explain how the cursor is obtained, what the reference format is, or what values control the result set beyond those hints.
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 uses a specific verb ('Fetch') and resource ('playlist tracks'), plus the qualifier 'bounded pagination' that distinguishes it from plain list-fetching. An agent can clearly tell it apart from siblings like get_playlist or liked_tracks without opening the 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?
The description simply states what the tool does and gives no guidance about when to choose it over siblings such as get_playlist, liked_tracks, or my_playlists. There are no alternative directions, exclusions, or usage conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recent_playsARead-onlyIdempotent
Fetch only the current API's last-25 recently played tracks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only, idempotent, and non-destructive, so the description's job is to add context beyond that. It adds the 'last-25' cap and 'current API' scope, which is helpful, but it does not clarify ordering, pagination, or what happens when fewer than 25 tracks exist. With annotations carrying the safety profile, a 3 is appropriate.
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 sentence with no redundancy. It front-loads the key verb and scope, and every word adds meaning. This is an example of concise, effective copy.
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 parameterless, read-only tool, the description is sufficient for an agent to understand what it returns. It does not define edge cases like an empty history or whether playback ordering is chronological, but given the low complexity and simple sibling landscape, the missing detail is minor.
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?
There are zero parameters, so the schema already covers this exhaustively with 100% coverage. The baseline for 0 params is 4, and the description does not attempt to document any parameters because none exist, which is correct.
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 gives a specific verb (Fetch), resource (recently played tracks), and a concrete scope (last-25, current API), which clearly distinguishes this from sibling tools like liked_tracks or following_tracks. However, it does not explicitly name or contrast any sibling tool, so it misses the full 5.
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 tool description gives no guidance on when to choose this versus alternatives such as liked_tracks, following_tracks, or playlist_tracks. There is no mention of context, prerequisites, or exclusions, so the agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommendBRead-onlyIdempotent
Combine local history/likes/following/search signals into new deterministic recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| content_type | No | ||
| preference_profile | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description does not contradict them. The description adds the determinism trait and the source-signal scope, but it does not disclose output format, defaults, personalization bounds, or other behavioral details such as pagination or rate limits. The annotation safety profile lowers the burden, making this adequate but not rich.
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 a single, concise sentence that front-loads the core action and scope. Every word contributes meaning, and there is no repetition of schema or annotation 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?
Given the tool's complexity—a nested preference_profile, multiple enums, zero parameter documentation, and no output schema—the description is insufficient. It does not explain what the returned recommendations look like, how the inputs affect results, or how this tool relates to nearby siblings. Some purpose is conveyed, but an agent would have to guess at critical details before invoking it confidently.
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 0%, so the description must compensate for undocumented parameters. It does not mention limit, content_type, or preference_profile at all, and the nested preference_profile object with seven sub-properties is left entirely unexplained. The description adds no semantic value beyond the parameter names already present in the schema.
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 ('combine') and resource ('local history/likes/following/search signals') and clearly communicates that the output is recommendations. It is not a tautology, and the 'deterministic' qualifier adds useful scope. However, it does not explicitly differentiate itself from sibling tools like related_tracks or search_tracks.
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 description implies when to use the tool: when you want recommendations derived from a combination of local history, likes, followings, and search signals. It provides no explicit when-not-to-use guidance, no mention of alternatives, and no conditions for choosing this over related_tracks or search_tracks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_resourceARead-onlyIdempotent
Resolve an HTTPS SoundCloud permalink through an allowlisted API redirect.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint are all set, so the agent knows this is a safe, non-destructive operation. The description adds one important detail: that it works through an 'allowlisted API redirect', which implies there may be restrictions on which URLs are valid. However, it doesn't clarify what happens for non-allowlisted URLs or the exact redirect behavior. Given the annotations already cover safety, the description adds some value but not rich behavioral detail.
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 exactly one sentence, concise and front-loaded with the core action ('Resolve an HTTPS SoundCloud permalink'), followed by the mechanism ('through an allowlisted API redirect'). No fluff, every word earns its place. It is a model of brevity for a single-purpose tool.
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?
Given the simplicity of the tool (one parameter, no output schema), the description is reasonably complete for basic use: it tells the agent what input to provide. However, it lacks context on the return format (what the resolution returns) and any error conditions (e.g., invalid or non-allowlisted URLs). The tool's complexity is low, so the bar is lower, but a bit more detail on expected output or failure behavior would make it 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 0%, meaning the schema gives no description for the 'url' parameter; the description must compensate. The description does state that the URL must be an HTTPS SoundCloud permalink, which adds semantics beyond the schema's generic 'uri' format. However, it doesn't specify any constraints like pattern or length beyond the schema's maxLength, so the added value is moderate. With 0% coverage, the description is partially compensatory, but it could be more explicit about what constitutes a valid permalink.
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 clearly states the action: resolving an HTTPS SoundCloud permalink, and specifies the mechanism (an allowlisted API redirect). It is specific about the input (an HTTPS URL from SoundCloud) and gives context about the permission. However, it does not explicitly differentiate from siblings; given that many sibling tools operate on specific resources like tracks, playlists, or users, this tool likely generalizes, but the description doesn't mention that explicitly.
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 description implies the tool should be used to resolve SoundCloud permalinks before accessing specific resources like tracks or playlists, but it does not state when to use it versus alternatives or what happens after resolution. There's no mention of alternatives or exclusion conditions, leaving the agent to infer usage. The tool's role as a resolver is clear, but guidance on when to choose it over other tools (like get_track) is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_preferencesAIdempotent
Save a minimal preference_profile only after explicit consent=true.
| Name | Required | Description | Default |
|---|---|---|---|
| consent | Yes | ||
| preference_profile | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotentHint=true and destructiveHint=false, so the description's 'save' is consistent with a non-destructive write. The description adds the requirement of explicit consent, which is a behavioral constraint not covered by annotations. However, it does not disclose whether the save overwrites existing preferences or merges them, nor does it describe error handling. It adds some context but not rich behavioral detail.
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 a single, front-loaded sentence with no unnecessary words. The key action and condition are stated immediately, making it highly efficient for an agent to parse and act on.
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 write operation with a nested object and no output schema, the description is too sparse. It does not explain whether the operation overwrites, merges, or upserts preferences, nor does it mention prerequisites like authentication. The consent condition is covered, but other essential behavioral aspects (e.g., what happens if consent is false, error scenarios) are omitted. An agent might incorrectly assume the tool handles partial updates or requires prior setup.
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 0%, so the description must compensate for lack of parameter documentation. It only mentions 'minimal preference_profile', which is vague and does not explain the fields or their semantics. The consent parameter is already constrained by the schema (const true), so the description adds little beyond that. It fails to clarify how the profile fields interact or what 'minimal' means in practice.
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 the exact action ('Save') and the resource ('preference_profile'), and includes a critical condition (consent=true). This clearly distinguishes it from sibling tools like get_preferences and delete_preferences, which are read and delete operations respectively. The purpose is unambiguous.
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 description provides a clear condition for use ('only after explicit consent=true'), which is a usage constraint. However, it does not explicitly mention when not to use it or provide alternatives (e.g., using get_preferences to read). The context of siblings implies the tool is for writing, but explicit routing to alternatives is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_playlistsARead-onlyIdempotent
Search public playlists; live metadata stays in the local viewer.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds 'live metadata stays in the local viewer,' which hints at a behavioral nuance, but it is vague and does not meaningfully expand on pagination, result scope, or other runtime behavior.
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 first clause is concise and front-loaded: 'Search public playlists.' The second clause is compact but cryptic, slightly reducing clarity; the overall description is still appropriately short with no redundant filler.
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 search tool, the description is minimally viable: annotations cover safety and the schema covers parameter constraints. However, with no output schema and no explanation of return values or pagination behavior, the description leaves meaningful gaps for an agent choosing and invoking the tool.
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 0% and the description does not explain any parameters. While names like query, limit, and cursor plus their constraints provide some clues, the description adds no semantic meaning beyond the input schema, so it fails to compensate for the coverage gap.
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, 'Search,' and a specific resource, 'public playlists,' which clearly distinguishes this tool from siblings like search_tracks and search_users. Even though the second clause is opaque, the core purpose is unambiguous.
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 phrase 'Search public playlists' gives a clear context for when the tool is relevant, but it provides no explicit when-not-to-use guidance or mention of alternatives. An agent must infer from sibling names that search_tracks or search_users cover other resource types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tracksARead-onlyIdempotent
Search public tracks; live metadata stays in the local viewer.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows this is a safe read operation. The description adds the useful semantic that this searches *public* tracks (not the user's private library) and that 'live metadata stays in the local viewer' – indicating the returned data is a snapshot or local view, which is a genuine behavioral disclosure beyond the annotations. This clarifies the scope boundary between public and personal data.
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 sentence, zero unnecessary words alerted. The core scope ('public tracks') comes first就和 the behavioral caveat ('live metadata stays in the local viewer') follows. Every clause earns its place and the description trades compression against clarity optimally.
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 search tool with readOnly/idempotent annotations, the description is mostly adequate. However, the sibling set includes related_tracks, following_tracks, and get_track, and with zero description coverage for the parameters and no output schema, the description doesn't fully disambiguate use cases (e.g., when to use search_tracks vs related_tracks). The local viewer framing is helpful but leaves out how results are ordered or what a 'snapshot' means for the caller.
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 0%, but the parameters are straightforward: query (search text), limit (max results), cursor (pagination). The description doesn't elaborate on these beyond the schema, but the schema itself provides clear names, types, and constraints. The description adds a small amount of context ('public tracks') that constrains what the query parameter should target, which partially compensates for the lack of param-level documentation.
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 clear verb ('Search') and resource ('public tracks'), distinguishing it from sibling search tools like search_playlists and search_users. It lacks mention of what kinds of tracks (e.g., by title, artist) or any limiting scope beyond public, but the basic purpose 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 phrase 'public tracks' provides some context, implying this searches only publicly available tracks rather than private or owned content. However, it doesn't explicitly explain when to use this tool versus siblings like get_track, following_tracks, or liked_tracks, nor does it mention alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_usersBRead-onlyIdempotent
Search public users; live metadata stays in the local viewer.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructiveness, so the safety profile is clear. The description adds the note 'live metadata stays in the local viewer,' which provides some behavioral context but is vague and could confuse agents about what the returned data contains.
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 a single, efficient sentence with no wasted words. It front-loads the action and resource, making it easy to parse. However, it is so brief that it sacrifices essential detail for conciseness.
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?
With no output schema and 0% parameter description, the tool definition is incomplete. The cursor parameter (pagination) is not explained, and the return format is not described. The cryptic note about live metadata adds ambiguity rather than clarity, making it inadequate for an agent to use correctly.
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 0%, and the description does not explain any of the parameters (query, limit, cursor). The agent must rely solely on parameter names and constraints, which is insufficient for understanding how to construct an effective query or handle pagination.
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 and resource ('Search public users') and clearly distinguishes this from sibling tools like search_tracks and search_playlists. The additional note about live metadata adds a distinct behavior, further clarifying intent.
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 description implies this tool is for searching users, but it does not explicitly mention when to use it over alternatives like search_tracks or search_playlists. No guidance is given on conditions or exclusions, leaving the agent to infer usage from the name and context.
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.
24 tool updates
v0.1.0- First observed
classify_podcasts - First observed
connect_account - First observed
connection_status - First observed
delete_preferences - First observed
demo_catalog - First observed
disconnect_account - First observed
following_tracks - First observed
followings - First observed
get_playlist - First observed
get_preferences - First observed
get_profile - First observed
get_track - First observed
liked_playlists - First observed
liked_tracks - First observed
my_playlists - First observed
playlist_tracks - First observed
recent_plays - First observed
recommend - First observed
related_tracks - First observed
resolve_resource - First observed
save_preferences - First observed
search_playlists - First observed
search_tracks - First observed
search_users
TDQS
Scored across 24 tools
Each tool maps to a distinct action or resource: auth, profile, play history, liked items, playlists, followings, search, track/playlist lookup, recommendations, preferences, and demo fixtures. Even similarly named tools like liked_tracks and following_tracks are clearly separated by their descriptions.
The set mixes consistent verb_noun names like get_track and search_tracks with bare noun endpoints like recent_plays, liked_playlists, and demo_catalog. All names are readable snake_case, but the lack of a uniform verb prefix for fetch/list operations makes the pattern inconsistent.
With 24 tools, the server sits in the heavy 16-25 range. Each tool has a specific purpose, but many are thin read-only retrievals that could be consolidated, so the count feels slightly excessive for the core companion scope.
The surface covers auth, profile data, listening history, likes, playlists, followings, search, track/playlist retrieval, recommendations, podcast classification, and preference CRUD. Minor gaps exist, such as no direct user-lookup or user-track endpoint, but agents can complete the main listening-companion workflows.
Maintenance
Related MCP Connectors
AI music and podcast platform for autonomous agents. SoundCloud for AI bots.
Builds narrated, playable music stories, explores sample lineage, and saves verified playlists.
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.
Personal context and preferences for AI via OAuth-approved profile sections and taste data.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides Multi-Agent Conversation Protocol interface for the SoundCloud API, enabling AI agents to interact with SoundCloud's music streaming platform through natural language.1-
- AlicenseBqualityCmaintenanceEnables uploading and managing SoundCloud tracks via the official API, with support for metadata, artwork, and automated token refresh.7MIT
- FlicenseNot gradedqualityCmaintenanceEnables remote browser automation via MCP, allowing models to open pages, read snapshots, click, fill, and select elements using Playwright, with built-in security restrictions against sensitive actions.-
- AlicenseBqualityCmaintenanceEnables AI assistants to remotely drive a hosted headless browser over HTTP, supporting navigation, clicking, typing, and structured page reading through the Model Context Protocol. It also provides bearer-token authentication for secure remote MCP access.234,633,135 npmApache 2.0