StudioSphere Pulse — Audio Intelligence
Server Details
Free licensed loops and authorized audio analysis: BPM, key, waveform. Estimate before paid use.
- Status
- Healthy
- Uptime
- 100.0% over 59 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- notpaulb/studiosphere-pulse-mcp
- GitHub Stars
- 0
- Server Listing
- studiosphere-pulse-mcp
TDQS
Scored across 10 tools
Most tools target distinct actions (estimate_cost, get_job_status, get_token_balance, list/purchase token packs, sample search/get). However, three tools (analyze_track, request_payment_link, start_trial) all initiate analysis through different payment/access paths, and purchase_token_pack overlaps with request_payment_link on payment, so an agent must read descriptions carefully to pick the right entry point.
All ten tools use consistent snake_case verb_noun form (analyze_track, estimate_cost, get_job_status, list_token_packs, search_open_loops, start_trial). The singular/plural contrast between get_open_loop and search_open_loops reflects the domain term rather than a naming inconsistency.
Ten tools is well-scoped for an audio-analysis service with pay-per-use billing, covering estimation, submission, polling, trial, payment, token management, and a sample library. No tool appears redundant or trivial.
The core lifecycle is covered end to end (estimate → analyze/pay/trial → poll status, plus token and sample-library operations). Minor gaps exist, such as no job-history listing, cancel/refund operation, or explicit licence/attribution lookup beyond open loops, but agents can work around these.
Available Tools
10 toolsanalyze_trackInspect
Run audio analysis on a public audio URL. Requires estimate_cost to be called first (job_estimate_id). Requires PULSE_API_KEY. Before calling, you MUST confirm with the user that they have a lawful basis to submit this audio for analysis. For a user-requested folder, project, playlist, or batch, one confirmation can cover every track in that scope. Returns job_id — poll get_job_status for results. If processing or payment returns estimate_pricing_changed, get a fresh free estimate with estimate_cost, present the new price, and wait for explicit user approval before processing or payment. Never silently retry analysis or purchase.
| Name | Required | Description | Default |
|---|---|---|---|
| tools | Yes | Analysis tools to run. Available in v1.0: bpm, key, waveform. Coming soon: structure, chords. | |
| audio_url | Yes | Public URL of the audio file. | |
| job_estimate_id | Yes | The job_estimate_id returned by estimate_cost. Must not have passed the returned expires_at timestamp. | |
| attestation_confirmed | Yes | Set to true ONLY after the user has confirmed they have rights, permission, lawful access, or another legal basis to submit this audio, or the current user-requested batch/folder/project containing it, for analysis. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | True when analysis was accepted. |
| error | No | Machine-readable error code. |
| job_id | No | Pulse analysis job id. |
| status | No | Current job status. |
| details | No | Additional structured context from Pulse. |
| message | No | Human-readable recovery guidance. |
| poll_url | No | Relative status polling URL. |
| retryable | No | Whether the caller may retry after changing state or waiting. |
| cache_hits | No | Tools served from cache. |
| stream_url | No | Relative SSE status URL. |
| account_type | No | Account type used for the request. |
| upgrade_path | No | |
| conversion_note | No | |
| tokens_estimated | No | Estimated token charge. |
| cost_usd_estimated | No | Estimated USD value. |
estimate_costRead-onlyIdempotentInspect
Estimate audio analysis cost anonymously and free before committing. Read analysis_options for eligible anonymous one-off Checkout, trial duration fit and key-based banked-token use; these do not verify balance or trial entitlement. Eligible quotes can include checkout.upfront_payment_estimate from the current charge builder; this is not a reserved price or a saved-link charge. Review the hosted amount before payment. Returns estimated dollars, job_estimate_id and expires_at. Review the estimate before spending; final cost depends on measured duration and completed analysis, and Checkout can collect a buffered amount with refund thresholds. If processing or payment returns estimate_pricing_changed, get a fresh free estimate, present the new price, and wait for explicit user approval before processing or payment. Never silently retry analysis or purchase.
| Name | Required | Description | Default |
|---|---|---|---|
| tools | Yes | Analysis tools to price. Available in v1.0: bpm, key, waveform. Coming soon: structure, chords. | |
| audio_url | Yes | Publicly accessible URL of the audio file (MP3, WAV, FLAC, OGG, Opus). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| error | No | Machine-readable error code. |
| tokens | No | Estimated Pulse tokens. |
| details | No | Additional structured context from Pulse. |
| message | No | Human-readable recovery guidance. |
| cost_usd | No | Estimated analysis cost in USD. |
| breakdown | No | Per-tool token and cost estimate. |
| retryable | No | Whether the caller may retry after changing state or waiting. |
| expires_at | No | ISO timestamp when the estimate expires. |
| content_type | No | |
| cost_display | No | Human-readable USD estimate. |
| duration_source | No | Duration provenance: prior worker measurement, declared WAV or MP3 frame metadata, MP3 bitrate inferred from a bounded prefix, assumed format byte rate, or placeholder. Prefix bitrate cannot establish that the whole file is constant bitrate. All quotes remain estimates; processing measures actual audio. |
| job_estimate_id | No | Estimate identifier valid for the configured TTL. |
| analysis_options | No | Advisory continuation choices for this estimate, not a reserved charge, verified balance, trial grant or host certification. |
| normalize_source | No | |
| duration_inferred | No | |
| audio_url_original | No | |
| audio_url_normalized | No | |
| content_length_bytes | No | |
| duration_estimate_sec | No | Estimated audio duration in seconds. |
get_job_statusRead-onlyIdempotentInspect
Resume a saved analysis job anonymously, including after interrupted Checkout or reconnection. Read continuation for human payment, bounded polling, result review or support. Preserve job_id; never create a replacement purchase to resume it. Checkout refund_status_source=local_ledger reflects durable Pulse reconciliation at refund_checked_at, not a fresh provider query; unconfirmed or needs_review must not be treated as a completed refund. Analysis cost is distinct from net payment. Completed/partial status and cost fields do not prove payment or refund settlement. Terminal Checkout result pages show billing separately; during recovery use the optional receipt API on demand; receipt_api_url is a separate on-demand read, not another MCP tool. Returns available results and provenance. Usable completed/partial results can include studio_notes: ready-to-save project notes with review warnings and failed tools. Notes are analysis snapshots, not payment/refund receipts; keep private job references and preserve review context.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The job_id returned by analyze_track or request_payment_link. | |
| include_waveform_data | No | Optional. Defaults to false so chat agents receive a compact waveform summary plus result_url. Set true only if raw waveform samples are needed. | |
| include_waveform_image | No | Optional. Defaults to true. When the job has waveform data, include a server-rendered SVG as MCP image content so the client can display it without fetching a URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Machine-readable error code. |
| job_id | No | Pulse analysis job id. |
| status | No | Current or terminal job status. |
| billing | No | |
| details | No | Additional structured context from Pulse. |
| message | No | Human-readable recovery guidance. |
| results | No | Analysis results when available. |
| cost_usd | No | |
| metadata | No | Analysis metadata, including asset type, source hints, library metadata, and confidence policy when available. |
| retryable | No | Whether the caller may retry after changing state or waiting. |
| expires_at | No | |
| result_url | No | Public result page URL. |
| completed_at | No | |
| continuation | No | Advisory saved-job recovery. URLs contain a private job reference. No provider read or settlement verification is performed. |
| studio_notes | No | Optional plain-text project notes for completed/partial usable results. Preserve review warnings, provenance and failed tools. Contains no audio/source URL or payment/refund receipt fields; job references are private. |
| waveform_file | No | |
| payment_source | No | |
| tokens_charged | No | |
| waveform_image | No | |
| tokens_estimated | No | |
| waveform_png_url | No | |
| waveform_svg_url | No | |
| result_provenance | No | Per-tool provenance and applicability summary for interpreting detected, audio_candidate (manual review required), filename-sourced, suppressed, or low-confidence results. |
| waveform_markdown | No | |
| result_quality_notes | No | Human-readable quality notes for suppressed, low-confidence, filename-sourced, or review-needed results. |
get_open_loopARead-onlyIdempotentInspect
Get a released sample’s metadata, exact licence, attribution, preview and WAV download URLs. Free; no account or tokens required. Keep attribution when using the sample in a song.
| Name | Required | Description | Default |
|---|---|---|---|
| pol_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| pack | No | |
| error | No | Machine-readable error code. |
| title | No | |
| pol_id | No | |
| details | No | Additional structured context from Pulse. |
| license | No | |
| message | No | Human-readable recovery guidance. |
| retryable | No | Whether the caller may retry after changing state or waiting. |
| attribution | No | |
| license_url | No | |
| download_url | No | |
| review_basis | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the bar is lower. The description still adds real context beyond them: no cost, no account or token consumption, and a downstream attribution obligation for the returned licence terms.
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?
Three tight sentences: the payload first, the cost/auth constraint second, the licence obligation last. No filler, and the most decision-relevant information is front-loaded.
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 no prose, and the description still summarizes them usefully. Missing only the discovery path for pol_id and any error behavior for invalid or unreleased IDs.
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 coverage is 0%, so the single parameter carries no documentation. The phrase 'a released sample's' implies pol_id identifies a sample, but the description never confirms the pol- ID format or where to obtain a valid value, leaving the burden only partly met.
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 ('Get a released sample's metadata, exact licence, attribution, preview and WAV download URLs'), enumerating the concrete payload. It is distinguishable from search_open_loops by the singular 'a released sample', but never names that sibling or the ID-lookup nature 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?
Gives prerequisite guidance (free, no account or tokens required) that tells an agent this call has no auth barrier. However, it offers no when-not conditions and does not route the agent to search_open_loops for discovering a pol_id or to analyze_track for analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_token_balanceARead-onlyIdempotentInspect
Check the banked token balance for the authenticated Pulse account. Requires PULSE_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Machine-readable error code. |
| details | No | Additional structured context from Pulse. |
| message | No | Human-readable recovery guidance. |
| retryable | No | Whether the caller may retry after changing state or waiting. |
| account_type | No | Pulse account type. |
| trial_policy | No | |
| banked_tokens | No | Current banked-token balance. |
| api_key_prefix | No | Redacted API-key prefix. |
| trial_allowance | No | |
| trial_expires_at | No | Trial expiry timestamp if this is a trial account. |
| account_created_at | No | Account creation timestamp. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds a genuinely useful behavioral detail beyond the annotations: the PULSE_API_KEY authentication requirement, which the rubric explicitly counts as credit-worthy 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?
Two short sentences with zero filler; the purpose is front-loaded and the auth constraint follows immediately. Nothing is wasted.
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 the description need not explain return values, and with no input parameters there is little else to document. Purpose plus auth requirement is sufficient for an agent to call this 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?
The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to clarify beyond the auth context it already provides.
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 ('banked token balance') scoped to the authenticated Pulse account. This is clearly distinguishable from sibling tools like list_token_packs or purchase_token_pack, which deal with packs rather than balance.
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 (query the current balance), but there is no explicit when-to-use or when-not-to-use guidance, and no alternatives are named. The auth prerequisite is stated but that is a precondition, not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_token_packsARead-onlyIdempotentInspect
List the available Pulse token packs (tier label, token count, price). Use before purchase_token_pack to show options to the user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Machine-readable error code. |
| packs | No | Available token-pack tiers. |
| details | No | Additional structured context from Pulse. |
| enabled | No | Whether token-pack purchasing is enabled. |
| message | No | Human-readable recovery guidance. |
| retryable | No | Whether the caller may retry after changing state or waiting. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering safety and idempotency. The description adds that the list includes tier label, token count, and price, which provides useful context about return content, but this may duplicate the output schema. No additional behavioral disclosures (e.g., auth requirements, rate limits, pagination) are provided, so a moderate score 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?
The description is only two sentences. The first sentence states the action and output contents, the second provides usage context. It is succinct, front-loaded, and every word provides value.
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 is low complexity: no parameters, simple list operation, with output schema present and comprehensive annotations. The description covers the core purpose and the primary usage context (before purchase). There are no significant gaps for the agent to invoke this tool 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?
The tool has zero parameters and the schema is empty. With no parameters to document, the baseline is 4. The description does not need to add parameter meaning, and it does not. It correctly avoids mentioning parameters that do not exist.
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: 'List the available Pulse token packs' with specific return contents (tier label, token count, price). It also distinguishes this tool from sibling purchase_token_pack by referencing it and positioning this as a pre-purchase listing 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?
The description gives explicit usage guidance: 'Use before purchase_token_pack to show options to the user.' This tells the agent exactly when to invoke this tool and names the downstream alternative/pair, fulfilling the when-to-use requirement clearly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
purchase_token_packAInspect
Create a Stripe Checkout session for a Pulse token pack. Returns payment_url — DO NOT submit it programmatically; surface it to the user so they can complete payment in their browser. Once paid, banked tokens are credited automatically. Requires PULSE_API_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| pack | Yes | Token pack tier |
Output Schema
| Name | Required | Description |
|---|---|---|
| pack | No | Token-pack tier label. |
| error | No | Machine-readable error code. |
| tokens | No | Tokens included in the pack. |
| details | No | Additional structured context from Pulse. |
| message | No | Human-readable recovery guidance. |
| currency | No | Checkout currency. |
| retryable | No | Whether the caller may retry after changing state or waiting. |
| amount_usd | No | Pack price in USD. |
| expires_at | No | ISO timestamp when the Checkout link expires. |
| payment_url | No | Stripe Checkout URL to present to the user. |
| purchase_id | No | Pulse token-pack purchase id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover safety hints (openWorldHint, non-idempotent, non-destructive); the description adds substantive context they cannot convey: the required PULSE_API_KEY, the asynchronous post-condition that tokens are credited after payment, and a hard prohibition on programmatic URL submission. It does not cover retry/idempotency semantics for repeated session creation, which matters for a non-idempotent 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?
Three tight sentences, purpose front-loaded, then the critical output-handling warning, then the auth prerequisite. No filler, and the most failure-prone instruction gets due prominence.
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 an output schema present, the return value need not be explained, and the auth requirement plus post-payment crediting are stated, so an agent has enough to invoke it correctly. The one gap is routing versus request_payment_link, which the description never addresses.
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?
Only one parameter and schema description coverage is 100%, so the schema fully documents 'pack' including its enum tiers. The description adds no meaning about tier choice or relative value, so 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?
States a specific verb and resource: 'Create a Stripe Checkout session for a Pulse token pack.' This clearly separates it from readers like get_token_balance and list_token_packs, but it does not distinguish itself from the sibling request_payment_link, which sounds like an overlapping purchasing path.
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?
Gives a clear operational constraint — do not submit the returned URL programmatically, surface it to the user instead — which tells the agent exactly how the tool is meant to be consumed. It does not state when to choose it over list_token_packs or request_payment_link, so an explicit alternative-selection rule is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_payment_linkInspect
Create anonymous one-off Stripe Checkout; no Pulse account or API key required. First read estimate_cost.analysis_options.checkout for admission minimum and billing guidance. Obtain explicit human approval to create the link and confirm a lawful basis for the audio; one rights confirmation can cover a requested batch/folder/project. Save job_id, payment_url and continuation.review_url privately; a lost Checkout link requires support, not a replacement purchase. Present payment_url and the upfront charged_display when returned for human review/payment. A reused link may omit charge fields; review its hosted amount rather than treating cost_display as the charge. Analysis begins automatically after payment; poll get_job_status with job_id. If estimate_pricing_changed is returned, get a fresh free estimate and new explicit approval. Never silently retry analysis or purchase. Below-admission quotes may offer minimum_charge_offer: show its upfront estimate and minimum final cost, then obtain explicit acceptance before passing accept_minimum_charge:true and max_upfront_amount_cents equal to the approved upfront ceiling. Never infer consent from rights confirmation. An exceeded cap needs fresh human review, not an automatic retry. If an existing Claude connector is missing accept_minimum_charge (boolean) or max_upfront_amount_cents (integer), refresh its tools list and start a fresh conversation using that same connector, preserving its URL/key/approval permissions and the original saved job/payment link. Stop if fields remain missing; never create a replacement purchase or new key for recovery. Two scoped existing-connector Claude Checkout workflows, including minimum-charge acceptance, were validated; anonymous initialization, OAuth, trial/banked workflows, other hosts and live cap rejection are not certified.
| Name | Required | Description | Default |
|---|---|---|---|
| job_estimate_id | Yes | The job_estimate_id returned by estimate_cost. | |
| accept_minimum_charge | No | Optional. Set true only after explicit human acceptance of minimum_charge_offer.minimum_final_cost_usd and its estimated upfront payment. Rights confirmation alone is not spending approval. | |
| attestation_confirmed | Yes | Set to true ONLY after the user has confirmed they have rights, permission, lawful access, or another legal basis to submit this audio, or the current user-requested batch/folder/project containing it, for analysis. | |
| max_upfront_amount_cents | No | Optional approved upfront USD ceiling in whole cents; required for minimum-charge acceptance. The gateway rejects a higher charge before creating a purchase. Do not raise it without renewed human approval. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Machine-readable error code. |
| job_id | No | Pulse job id for polling after payment. |
| deduped | No | True when an existing active Checkout link was reused. |
| details | No | Additional structured context from Pulse. |
| message | No | Human-readable recovery guidance. |
| retryable | No | Whether the caller may retry after changing state or waiting. |
| expires_at | No | ISO timestamp when the Checkout link expires. |
| payment_url | No | Stripe Checkout URL to present to the user. |
| continuation | No | Advisory saved-job recovery. URLs contain a private job reference. No provider read or settlement verification is performed. |
| cost_display | No | Human-readable estimated cost. |
| charged_display | No | Human-readable upfront Checkout charge. |
| amount_charged_cents | No | Stripe Checkout charge in cents. |
| amount_estimate_cents | No | Estimated usage value in cents. |
search_open_loopsARead-onlyIdempotentInspect
Find released original synthesis kits and individually auditioned source samples by keyword, pack, BPM, key and licence. Automated checks are not listening review. Free; no account or tokens required. Source tags are creator hints. Preserve attribution when required and follow each sample’s licence.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search sample titles, pack names and source tags. | |
| key | No | ||
| pack | No | ||
| limit | No | ||
| offset | No | ||
| bpm_max | No | ||
| bpm_min | No | ||
| license | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Machine-readable error code. |
| items | No | |
| limit | No | |
| total | No | |
| offset | No | |
| details | No | Additional structured context from Pulse. |
| message | No | Human-readable recovery guidance. |
| retryable | No | Whether the caller may retry after changing state or waiting. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which already declare readOnly/idempotent/non-destructive/openWorld), the description adds genuinely useful behavioral context: the automated checks are not a listening review, source tags are only creator hints, and callers must preserve attribution and follow each sample's licence. These caveats are not derivable from annotations or schema.
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?
Four short sentences, front-loaded with the core purpose before the cost, quality and licensing caveats. Dense but each sentence carries information; no wasted 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?
An output schema exists so return values need not be described, and the description covers cost, licence/attribution policy and metadata caveats. Still, with 8 parameters at 13% schema coverage and no mention of limit/offset, an agent lacks full calling guidance, so it is only minimally 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 coverage is only 13% (only 'q' documented), so the description would need to compensate. It names the searchable dimensions (keyword, pack, BPM, key, licence), partially mapping to q/pack/bpm_min/bpm_max/key/license, but gives no syntax or format detail and never covers limit/offset. Adequate but incomplete against a low-coverage 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 names a specific verb (Find) and a precise resource set (released original synthesis kits and individually auditioned source samples) plus the search facets (keyword, pack, BPM, key, licence). It is clearly a search tool, but it never explicitly distinguishes itself from the singular sibling get_open_loop, so it stops short of 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?
It notes the tool is 'Free; no account or tokens required,' which implicitly contrasts it with token/paid siblings like estimate_cost, get_token_balance, purchase_token_pack and start_trial. However, there is no explicit when-to-use/when-not statement and no named alternative (e.g., vs get_open_loop), leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_trialAInspect
Start a temporary, email-free Pulse trial for one URL analysis. Read trial_policy and trial_allowance for the actual duration cap and remaining attempts; an existing trial key may have a lower cap. One completed/partial analysis consumes the allowance regardless of remaining tokens. A failed analysis may retry only when attempts remain. No Stripe Checkout session is created. Store the returned private API key in the client or a trusted local environment; never repost it in logs, screenshots, shared chats or issues. Confirm rights, permission, lawful access, or another legal basis before analysis. The original CC0 demo is https://pulse.studiosphere.space/assets/pulse-demo.mp3 (180 seconds); use it only if it fits the returned cap.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Machine-readable error code. |
| api_key | No | Temporary Pulse API key for the trial account. Treat as private; do not print it in public logs, screenshots, GitHub issues, shared chats, or directory examples. |
| details | No | Additional structured context from Pulse. |
| message | No | Human-readable recovery guidance. |
| retryable | No | Whether the caller may retry after changing state or waiting. |
| expires_at | No | ISO timestamp when the temporary key expires. |
| usage_note | No | Limits and usage guidance for the trial. |
| account_type | No | The account type created by this tool. |
| analyze_path | No | REST path for authenticated analysis. |
| trial_policy | No | |
| upgrade_path | No | Path for converting to an account. |
| banked_tokens | No | Trial token balance granted. |
| estimate_path | No | REST path for free estimates. |
| trial_allowance | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already say readOnly=false, openWorld=true, idempotent=false, destructive=false, but the description adds crucial behavior: existing trial key may lower the cap, consumption semantics for completed/partial vs failed analyses, no Stripe Checkout, and secure handling of the returned private API key. No contradiction.
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?
Front-loaded with purpose and key constraints. Dense but every sentence carries operational, security, or legal meaning; could be made more scannable, but no significant waste.
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 tool with an output schema and annotations covering safety, the description supplies all needed calling context: trial policy references, allowance/retry rules, payment distinction, key storage, and legal prerequisites. Return values are covered by the output schema.
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 input parameters, so the baseline is 4. The description adds no parameter meaning because none exist, though it mentions a returned private API key and a demo URL.
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?
Specific verb (Start) and resource (temporary, email-free Pulse trial for one URL analysis). It also distinguishes itself from paid siblings by stating 'No Stripe Checkout session is created,' so an agent can tell it apart from purchase_token_pack or request_payment_link.
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?
Gives clear conditions: read trial_policy and trial_allowance, one analysis consumes allowance, failed analysis retries only if attempts remain, no Stripe session, confirm legal basis. It does not name alternative tools or explicitly say when to prefer them, so not a 5.
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.
2 tool updates
- Changed
estimate_cost1 field changed- added
Output schema / properties / analysis_options / properties / result_deliveryAdded value: +{ + "additionalProperties": false, + "properties": { + "guidance": { + "type": "string" + }, + "studio_notes_field": { + "const": "studio_notes", + "type": "string" + }, + "tool": { + "const": "get_job_status", + "type": "string" + }, + "when": { + "const": "completed_or_partial_with_usable_results", + "type": "string" + } + }, + "required": [ + "tool", + "studio_notes_field", + "when", + "guidance" + ], + "type": "object" +}
- Changed
get_job_status1 field changed- added
Output schema / properties / studio_notesAdded value: +{ + "description": "Optional plain-text project notes for completed/partial usable results. Preserve review warnings, provenance and failed tools. Contains no audio/source URL or payment/refund receipt fields; job references are private.", + "type": "string" +}
2 tool updates
- Changed
estimate_cost1 field changed- added
Output schema / properties / analysis_options / properties / checkout / properties / minimum_charge_offerAdded value: +{ + "description": "Optional below-admission Checkout choice. Explicitly approve its minimum final cost and upfront estimate; send both acceptance and an approved spending ceiling. It is not a reserved price.", + "properties": { + "acceptance_parameter": { + "const": "accept_minimum_charge", + "type": "string" + }, + "eligible": { + "const": true, + "type": "boolean" + }, + "minimum_final_cost_usd": { + "minimum": 0, + "type": "number" + }, + "requires_explicit_acceptance": { + "const": true, + "type": "boolean" + }, + "spending_limit_parameter": { + "const": "max_upfront_amount_cents", + "type": "string" + }, + "upfront_payment_estimate": { + "properties": { + "amount_cents": { + "minimum": 1, + "type": "integer" + }, + "currency": { + "const": "USD", + "type": "string" + }, + "display": { + "type": "string" + }, + "reserved": { + "const": false, + "type": "boolean" + } + }, + "required": [ + "amount_cents", + "display", + "currency", + "reserved" + ], + "type": "object" + } + }, + "required": [ + "eligible", + "requires_explicit_acceptance", + "minimum_final_cost_usd", + "upfront_payment_estimate", + "acceptance_parameter", + "spending_limit_parameter" + ], + "type": "object" +}
- Changed
request_payment_link2 fields changed- added
Input schema / properties / accept_minimum_chargeAdded value: +{ + "description": "Optional. Set true only after explicit human acceptance of minimum_charge_offer.minimum_final_cost_usd and its estimated upfront payment. Rights confirmation alone is not spending approval.", + "type": "boolean" +} - added
Input schema / properties / max_upfront_amount_centsAdded value: +{ + "description": "Optional approved upfront USD ceiling in whole cents; required for minimum-charge acceptance. The gateway rejects a higher charge before creating a purchase. Do not raise it without renewed human approval.", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +}
1 tool update
- Changed
estimate_cost2 fields changed- changed
Output schema / properties / duration_source / descriptionPrevious value: -"Duration provenance: prior worker measurement, declared uncompressed WAV sample frames, assumed format byte rate, or placeholder. All quotes remain estimates; processing measures actual audio."New value: +"Duration provenance: prior worker measurement, declared WAV or MP3 frame metadata, MP3 bitrate inferred from a bounded prefix, assumed format byte rate, or placeholder. Prefix bitrate cannot establish that the whole file is constant bitrate. All quotes remain estimates; processing measures actual audio." - changed
Output schema / properties / duration_source / enumPrevious value: -[ - "worker_cache", - "wav_header", - "byte_rate", - "placeholder" -]New value: +[ + "worker_cache", + "wav_header", + "mp3_header", + "mp3_bitrate", + "byte_rate", + "placeholder" +]
2 tool updates
- Changed
get_job_status1 field changed- added
Output schema / properties / continuationAdded value: +{ + "additionalProperties": false, + "description": "Advisory saved-job recovery. URLs contain a private job reference. No provider read or settlement verification is performed.", + "properties": { + "action": { + "enum": [ + "complete_checkout", + "wait", + "review_results", + "contact_support", + "check_saved_job" + ], + "type": "string" + }, + "arguments": { + "additionalProperties": false, + "properties": { + "job_id": { + "type": "string" + } + }, + "required": [ + "job_id" + ], + "type": "object" + }, + "automatic_resubmission_allowed": { + "const": false, + "type": "boolean" + }, + "financial_status_verified": { + "const": false, + "type": "boolean" + }, + "guidance": { + "type": "string" + }, + "max_poll_attempts": { + "minimum": 1, + "type": "integer" + }, + "missing_payment_url_action": { + "const": "contact_support", + "type": "string" + }, + "poll_after_seconds": { + "minimum": 1, + "type": "integer" + }, + "receipt_api_url": { + "type": "string" + }, + "review_url": { + "type": "string" + }, + "status_url": { + "type": "string" + }, + "support_email": { + "type": "string" + }, + "tool": { + "const": "get_job_status", + "type": "string" + } + }, + "required": [ + "action", + "tool", + "arguments", + "status_url", + "review_url", + "automatic_resubmission_allowed", + "financial_status_verified", + "support_email", + "guidance" + ], + "type": "object" +}
- Changed
request_payment_link1 field changed- added
Output schema / properties / continuationAdded value: +{ + "additionalProperties": false, + "description": "Advisory saved-job recovery. URLs contain a private job reference. No provider read or settlement verification is performed.", + "properties": { + "action": { + "enum": [ + "complete_checkout", + "wait", + "review_results", + "contact_support", + "check_saved_job" + ], + "type": "string" + }, + "arguments": { + "additionalProperties": false, + "properties": { + "job_id": { + "type": "string" + } + }, + "required": [ + "job_id" + ], + "type": "object" + }, + "automatic_resubmission_allowed": { + "const": false, + "type": "boolean" + }, + "financial_status_verified": { + "const": false, + "type": "boolean" + }, + "guidance": { + "type": "string" + }, + "max_poll_attempts": { + "minimum": 1, + "type": "integer" + }, + "missing_payment_url_action": { + "const": "contact_support", + "type": "string" + }, + "poll_after_seconds": { + "minimum": 1, + "type": "integer" + }, + "receipt_api_url": { + "type": "string" + }, + "review_url": { + "type": "string" + }, + "status_url": { + "type": "string" + }, + "support_email": { + "type": "string" + }, + "tool": { + "const": "get_job_status", + "type": "string" + } + }, + "required": [ + "action", + "tool", + "arguments", + "status_url", + "review_url", + "automatic_resubmission_allowed", + "financial_status_verified", + "support_email", + "guidance" + ], + "type": "object" +}
2 tool updates
- Changed
estimate_cost1 field changed- added
Output schema / properties / analysis_optionsAdded value: +{ + "description": "Advisory continuation choices for this estimate, not a reserved charge, verified balance, trial grant or host certification.", + "properties": { + "advisory": { + "const": true, + "type": "boolean" + }, + "banked_tokens": { + "properties": { + "balance_tool": { + "type": "string" + }, + "balance_verified": { + "const": false, + "type": "boolean" + }, + "estimated_tokens": { + "type": "integer" + }, + "guidance": { + "type": "string" + }, + "packs_tool": { + "type": "string" + }, + "requires_api_key": { + "const": true, + "type": "boolean" + }, + "token_shop_url": { + "type": "string" + }, + "tool": { + "const": "analyze_track", + "type": "string" + } + }, + "required": [ + "tool", + "requires_api_key", + "balance_verified", + "estimated_tokens", + "balance_tool", + "packs_tool", + "token_shop_url", + "guidance" + ], + "type": "object" + }, + "checkout": { + "properties": { + "billing_terms_url": { + "type": "string" + }, + "eligible": { + "type": "boolean" + }, + "guidance": { + "type": "string" + }, + "human_payment_required": { + "const": true, + "type": "boolean" + }, + "minimum_usd": { + "type": "number" + }, + "reason": { + "enum": [ + "eligible", + "below_minimum_charge" + ], + "type": "string" + }, + "requires_api_key": { + "const": false, + "type": "boolean" + }, + "tool": { + "const": "request_payment_link", + "type": "string" + }, + "upfront_payment_estimate": { + "description": "Advisory current-builder upfront Checkout amount, not a reserved price or a saved-link charge. Review the hosted amount before payment.", + "properties": { + "amount_cents": { + "minimum": 0, + "type": "integer" + }, + "currency": { + "const": "USD", + "type": "string" + }, + "display": { + "type": "string" + }, + "reserved": { + "const": false, + "type": "boolean" + } + }, + "required": [ + "amount_cents", + "display", + "currency", + "reserved" + ], + "type": "object" + } + }, + "required": [ + "eligible", + "reason", + "minimum_usd", + "tool", + "requires_api_key", + "human_payment_required", + "billing_terms_url", + "guidance" + ], + "type": "object" + }, + "guidance": { + "type": "string" + }, + "trial": { + "properties": { + "allowance_tool": { + "type": "string" + }, + "allowance_verified": { + "const": false, + "type": "boolean" + }, + "analysis_tool": { + "type": "string" + }, + "credential_creation_requires_approval": { + "const": true, + "type": "boolean" + }, + "duration_within_public_policy": { + "type": "boolean" + }, + "enabled": { + "type": "boolean" + }, + "guidance": { + "type": "string" + }, + "max_duration_sec": { + "type": "number" + }, + "requires_reconnection": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "enabled", + "duration_within_public_policy", + "max_duration_sec", + "allowance_verified", + "credential_creation_requires_approval", + "requires_reconnection", + "allowance_tool", + "analysis_tool", + "guidance" + ], + "type": "object" + } + }, + "required": [ + "advisory", + "guidance", + "checkout", + "trial", + "banked_tokens" + ], + "type": "object" +}
- Changed
request_payment_link1 field changed- changed
Output schema / anyOfPrevious value: -[ - { - "required": [ - "payment_url", - "job_id", - "cost_display", - "charged_display", - "amount_charged_cents", - "amount_estimate_cents", - "expires_at" - ] - }, - { - "required": [ - "error", - "message" - ] - } -]New value: +[ + { + "required": [ + "payment_url", + "job_id", + "cost_display", + "charged_display", + "amount_charged_cents", + "amount_estimate_cents", + "expires_at" + ] + }, + { + "required": [ + "error", + "message" + ] + }, + { + "properties": { + "deduped": { + "const": true + } + }, + "required": [ + "payment_url", + "job_id", + "cost_display", + "expires_at", + "deduped" + ] + } +]
1 tool update
- Changed
estimate_cost1 field changed- added
Output schema / properties / duration_sourceAdded value: +{ + "description": "Duration provenance: prior worker measurement, declared uncompressed WAV sample frames, assumed format byte rate, or placeholder. All quotes remain estimates; processing measures actual audio.", + "enum": [ + "worker_cache", + "wav_header", + "byte_rate", + "placeholder" + ], + "type": "string" +}
1 tool update
- Changed
analyze_track1 field changed- changed
Input schema / properties / job_estimate_id / descriptionPrevious value: -"The job_estimate_id returned by estimate_cost. Must not be expired (30 min TTL)."New value: +"The job_estimate_id returned by estimate_cost. Must not have passed the returned expires_at timestamp."
4 tool updates
- Changed
get_job_status1 field changed- changed
Output schema / properties / result_provenance / descriptionPrevious value: -"Per-tool provenance and applicability summary for interpreting detected, filename-sourced, suppressed, or low-confidence results."New value: +"Per-tool provenance and applicability summary for interpreting detected, audio_candidate (manual review required), filename-sourced, suppressed, or low-confidence results."
- Changed
get_token_balance2 fields changed- added
Output schema / properties / trial_allowanceAdded value: +{ + "additionalProperties": false, + "properties": { + "analyses_remaining": { + "type": "integer" + }, + "attempts_remaining": { + "type": "integer" + }, + "max_duration_sec": { + "type": "integer" + }, + "state": { + "enum": [ + "available", + "in_progress", + "used", + "exhausted" + ], + "type": "string" + } + }, + "required": [ + "state", + "analyses_remaining", + "attempts_remaining", + "max_duration_sec" + ], + "type": "object" +} - added
Output schema / properties / trial_policyAdded value: +{ + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "expires_in_hours": { + "type": "integer" + }, + "max_duration_sec": { + "type": "integer" + }, + "max_queued_attempts": { + "type": "integer" + }, + "tokens": { + "type": "integer" + } + }, + "required": [ + "enabled", + "tokens", + "max_duration_sec", + "max_queued_attempts", + "expires_in_hours" + ], + "type": "object" +}
- Changed
purchase_token_pack1 field changed- changed
Input schema / properties / pack / enumPrevious value: -[ - "10K", - "50K", - "200K" -]New value: +[ + "1K", + "10K", + "50K", + "200K" +]
- Changed
start_trial3 fields changed- changed
Output schema / anyOfPrevious value: -[ - { - "required": [ - "api_key", - "account_type", - "banked_tokens", - "expires_at", - "usage_note" - ] - }, - { - "required": [ - "error", - "message" - ] - } -]New value: +[ + { + "required": [ + "api_key", + "account_type", + "banked_tokens", + "expires_at", + "usage_note", + "trial_policy", + "trial_allowance" + ] + }, + { + "required": [ + "error", + "message" + ] + } +] - added
Output schema / properties / trial_allowanceAdded value: +{ + "additionalProperties": false, + "properties": { + "analyses_remaining": { + "type": "integer" + }, + "attempts_remaining": { + "type": "integer" + }, + "max_duration_sec": { + "type": "integer" + }, + "state": { + "enum": [ + "available", + "in_progress", + "used", + "exhausted" + ], + "type": "string" + } + }, + "required": [ + "state", + "analyses_remaining", + "attempts_remaining", + "max_duration_sec" + ], + "type": "object" +} - added
Output schema / properties / trial_policyAdded value: +{ + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "expires_in_hours": { + "type": "integer" + }, + "max_duration_sec": { + "type": "integer" + }, + "max_queued_attempts": { + "type": "integer" + }, + "tokens": { + "type": "integer" + } + }, + "required": [ + "enabled", + "tokens", + "max_duration_sec", + "max_queued_attempts", + "expires_in_hours" + ], + "type": "object" +}
2 tool updates
- Changed
get_open_loop2 fields changed- added
Output schema / properties / packAdded value: +{ + "maxLength": 200, + "type": [ + "string", + "null" + ] +} - added
Output schema / properties / review_basisAdded value: +{ + "enum": [ + "original_synthesis", + "individually_auditioned" + ], + "type": "string" +}
- Changed
search_open_loops2 fields changed- added
Input schema / properties / packAdded value: +{ + "maxLength": 200, + "type": "string" +} - changed
Input schema / properties / q / descriptionPrevious value: -"Search sample titles and source tags."New value: +"Search sample titles, pack names and source tags."
2 tool updates
- Added
get_open_loop - Added
search_open_loops
1 tool update
- Changed
get_job_status3 fields changed- added
Output schema / properties / metadataAdded value: +{ + "additionalProperties": true, + "description": "Analysis metadata, including asset type, source hints, library metadata, and confidence policy when available.", + "type": "object" +} - added
Output schema / properties / result_provenanceAdded value: +{ + "additionalProperties": true, + "description": "Per-tool provenance and applicability summary for interpreting detected, filename-sourced, suppressed, or low-confidence results.", + "type": "object" +} - added
Output schema / properties / result_quality_notesAdded value: +{ + "description": "Human-readable quality notes for suppressed, low-confidence, filename-sourced, or review-needed results.", + "items": { + "type": "string" + }, + "type": "array" +}
1 tool update
- Changed
start_trial1 field changed- changed
Output schema / properties / api_key / descriptionPrevious value: -"Temporary Pulse API key for the trial account."New value: +"Temporary Pulse API key for the trial account. Treat as private; do not print it in public logs, screenshots, GitHub issues, shared chats, or directory examples."
8 tool updates
- Changed
analyze_track3 fields changed- added
Output schema / anyOfAdded value: +[ + { + "required": [ + "ok", + "job_id", + "status", + "cache_hits", + "tokens_estimated", + "cost_usd_estimated", + "poll_url", + "stream_url" + ] + }, + { + "required": [ + "error", + "message" + ] + } +] - added
Output schema / propertiesAdded value: +{ + "account_type": { + "description": "Account type used for the request.", + "type": "string" + }, + "cache_hits": { + "description": "Tools served from cache.", + "items": { + "type": "string" + }, + "type": "array" + }, + "conversion_note": { + "type": "string" + }, + "cost_usd_estimated": { + "description": "Estimated USD value.", + "type": "number" + }, + "details": { + "additionalProperties": true, + "description": "Additional structured context from Pulse.", + "type": "object" + }, + "error": { + "description": "Machine-readable error code.", + "type": "string" + }, + "job_id": { + "description": "Pulse analysis job id.", + "type": "string" + }, + "message": { + "description": "Human-readable recovery guidance.", + "type": "string" + }, + "ok": { + "description": "True when analysis was accepted.", + "type": "boolean" + }, + "poll_url": { + "description": "Relative status polling URL.", + "type": "string" + }, + "retryable": { + "description": "Whether the caller may retry after changing state or waiting.", + "type": "boolean" + }, + "status": { + "description": "Current job status.", + "type": "string" + }, + "stream_url": { + "description": "Relative SSE status URL.", + "type": "string" + }, + "tokens_estimated": { + "description": "Estimated token charge.", + "type": "number" + }, + "upgrade_path": { + "type": "string" + } +} - added
Output schema / requiredAdded value: +[]
- Changed
estimate_cost3 fields changed- added
Output schema / anyOfAdded value: +[ + { + "required": [ + "cost_usd", + "cost_display", + "tokens", + "breakdown", + "duration_estimate_sec", + "job_estimate_id", + "expires_at" + ] + }, + { + "required": [ + "error", + "message" + ] + } +] - added
Output schema / propertiesAdded value: +{ + "audio_url_normalized": { + "type": "string" + }, + "audio_url_original": { + "type": "string" + }, + "breakdown": { + "additionalProperties": { + "additionalProperties": true, + "properties": { + "cost_usd": { + "type": "number" + }, + "tokens": { + "type": "number" + } + }, + "required": [ + "tokens", + "cost_usd" + ], + "type": "object" + }, + "description": "Per-tool token and cost estimate.", + "type": "object" + }, + "content_length_bytes": { + "type": "number" + }, + "content_type": { + "type": "string" + }, + "cost_display": { + "description": "Human-readable USD estimate.", + "type": "string" + }, + "cost_usd": { + "description": "Estimated analysis cost in USD.", + "type": "number" + }, + "details": { + "additionalProperties": true, + "description": "Additional structured context from Pulse.", + "type": "object" + }, + "duration_estimate_sec": { + "description": "Estimated audio duration in seconds.", + "type": "number" + }, + "duration_inferred": { + "type": "boolean" + }, + "error": { + "description": "Machine-readable error code.", + "type": "string" + }, + "expires_at": { + "description": "ISO timestamp when the estimate expires.", + "type": "string" + }, + "job_estimate_id": { + "description": "Estimate identifier valid for the configured TTL.", + "type": "string" + }, + "message": { + "description": "Human-readable recovery guidance.", + "type": "string" + }, + "normalize_source": { + "type": "string" + }, + "note": { + "type": "string" + }, + "retryable": { + "description": "Whether the caller may retry after changing state or waiting.", + "type": "boolean" + }, + "tokens": { + "description": "Estimated Pulse tokens.", + "type": "number" + } +} - added
Output schema / requiredAdded value: +[]
- Changed
get_job_status3 fields changed- added
Output schema / anyOfAdded value: +[ + { + "required": [ + "job_id", + "status" + ] + }, + { + "required": [ + "error", + "message" + ] + } +] - added
Output schema / propertiesAdded value: +{ + "billing": { + "additionalProperties": true, + "type": "object" + }, + "completed_at": { + "type": "string" + }, + "cost_usd": { + "type": "number" + }, + "details": { + "additionalProperties": true, + "description": "Additional structured context from Pulse.", + "type": "object" + }, + "error": { + "description": "Machine-readable error code.", + "type": "string" + }, + "expires_at": { + "type": "string" + }, + "job_id": { + "description": "Pulse analysis job id.", + "type": "string" + }, + "message": { + "description": "Human-readable recovery guidance.", + "type": "string" + }, + "payment_source": { + "type": "string" + }, + "result_url": { + "description": "Public result page URL.", + "type": "string" + }, + "results": { + "additionalProperties": true, + "description": "Analysis results when available.", + "type": "object" + }, + "retryable": { + "description": "Whether the caller may retry after changing state or waiting.", + "type": "boolean" + }, + "status": { + "description": "Current or terminal job status.", + "type": "string" + }, + "tokens_charged": { + "type": "number" + }, + "tokens_estimated": { + "type": "number" + }, + "waveform_file": { + "additionalProperties": true, + "type": "object" + }, + "waveform_image": { + "additionalProperties": true, + "type": "object" + }, + "waveform_markdown": { + "type": "string" + }, + "waveform_png_url": { + "type": "string" + }, + "waveform_svg_url": { + "type": "string" + } +} - added
Output schema / requiredAdded value: +[]
- Changed
get_token_balance3 fields changed- added
Output schema / anyOfAdded value: +[ + { + "required": [ + "banked_tokens", + "api_key_prefix", + "account_type", + "trial_expires_at", + "account_created_at" + ] + }, + { + "required": [ + "error", + "message" + ] + } +] - added
Output schema / propertiesAdded value: +{ + "account_created_at": { + "description": "Account creation timestamp.", + "type": "string" + }, + "account_type": { + "description": "Pulse account type.", + "type": "string" + }, + "api_key_prefix": { + "description": "Redacted API-key prefix.", + "type": "string" + }, + "banked_tokens": { + "description": "Current banked-token balance.", + "type": "number" + }, + "details": { + "additionalProperties": true, + "description": "Additional structured context from Pulse.", + "type": "object" + }, + "error": { + "description": "Machine-readable error code.", + "type": "string" + }, + "message": { + "description": "Human-readable recovery guidance.", + "type": "string" + }, + "retryable": { + "description": "Whether the caller may retry after changing state or waiting.", + "type": "boolean" + }, + "trial_expires_at": { + "description": "Trial expiry timestamp if this is a trial account.", + "type": [ + "string", + "null" + ] + } +} - added
Output schema / requiredAdded value: +[]
- Changed
list_token_packs3 fields changed- added
Output schema / anyOfAdded value: +[ + { + "required": [ + "enabled", + "packs" + ] + }, + { + "required": [ + "error", + "message" + ] + } +] - added
Output schema / propertiesAdded value: +{ + "details": { + "additionalProperties": true, + "description": "Additional structured context from Pulse.", + "type": "object" + }, + "enabled": { + "description": "Whether token-pack purchasing is enabled.", + "type": "boolean" + }, + "error": { + "description": "Machine-readable error code.", + "type": "string" + }, + "message": { + "description": "Human-readable recovery guidance.", + "type": "string" + }, + "packs": { + "description": "Available token-pack tiers.", + "items": { + "additionalProperties": true, + "properties": { + "amount_cents": { + "type": "number" + }, + "amount_usd": { + "type": "number" + }, + "currency": { + "type": "string" + }, + "pack": { + "type": "string" + }, + "tokens": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "retryable": { + "description": "Whether the caller may retry after changing state or waiting.", + "type": "boolean" + } +} - added
Output schema / requiredAdded value: +[]
- Changed
purchase_token_pack3 fields changed- added
Output schema / anyOfAdded value: +[ + { + "required": [ + "purchase_id", + "pack", + "tokens", + "amount_usd", + "currency", + "payment_url", + "expires_at" + ] + }, + { + "required": [ + "error", + "message" + ] + } +] - added
Output schema / propertiesAdded value: +{ + "amount_usd": { + "description": "Pack price in USD.", + "type": "number" + }, + "currency": { + "description": "Checkout currency.", + "type": "string" + }, + "details": { + "additionalProperties": true, + "description": "Additional structured context from Pulse.", + "type": "object" + }, + "error": { + "description": "Machine-readable error code.", + "type": "string" + }, + "expires_at": { + "description": "ISO timestamp when the Checkout link expires.", + "type": "string" + }, + "message": { + "description": "Human-readable recovery guidance.", + "type": "string" + }, + "pack": { + "description": "Token-pack tier label.", + "type": "string" + }, + "payment_url": { + "description": "Stripe Checkout URL to present to the user.", + "type": "string" + }, + "purchase_id": { + "description": "Pulse token-pack purchase id.", + "type": "string" + }, + "retryable": { + "description": "Whether the caller may retry after changing state or waiting.", + "type": "boolean" + }, + "tokens": { + "description": "Tokens included in the pack.", + "type": "number" + } +} - added
Output schema / requiredAdded value: +[]
- Changed
request_payment_link3 fields changed- added
Output schema / anyOfAdded value: +[ + { + "required": [ + "payment_url", + "job_id", + "cost_display", + "charged_display", + "amount_charged_cents", + "amount_estimate_cents", + "expires_at" + ] + }, + { + "required": [ + "error", + "message" + ] + } +] - added
Output schema / propertiesAdded value: +{ + "amount_charged_cents": { + "description": "Stripe Checkout charge in cents.", + "type": "number" + }, + "amount_estimate_cents": { + "description": "Estimated usage value in cents.", + "type": "number" + }, + "charged_display": { + "description": "Human-readable upfront Checkout charge.", + "type": "string" + }, + "cost_display": { + "description": "Human-readable estimated cost.", + "type": "string" + }, + "deduped": { + "description": "True when an existing active Checkout link was reused.", + "type": "boolean" + }, + "details": { + "additionalProperties": true, + "description": "Additional structured context from Pulse.", + "type": "object" + }, + "error": { + "description": "Machine-readable error code.", + "type": "string" + }, + "expires_at": { + "description": "ISO timestamp when the Checkout link expires.", + "type": "string" + }, + "job_id": { + "description": "Pulse job id for polling after payment.", + "type": "string" + }, + "message": { + "description": "Human-readable recovery guidance.", + "type": "string" + }, + "payment_url": { + "description": "Stripe Checkout URL to present to the user.", + "type": "string" + }, + "retryable": { + "description": "Whether the caller may retry after changing state or waiting.", + "type": "boolean" + } +} - added
Output schema / requiredAdded value: +[]
- Changed
start_trial3 fields changed- added
Output schema / anyOfAdded value: +[ + { + "required": [ + "api_key", + "account_type", + "banked_tokens", + "expires_at", + "usage_note" + ] + }, + { + "required": [ + "error", + "message" + ] + } +] - added
Output schema / propertiesAdded value: +{ + "account_type": { + "description": "The account type created by this tool.", + "enum": [ + "trial" + ], + "type": "string" + }, + "analyze_path": { + "description": "REST path for authenticated analysis.", + "type": "string" + }, + "api_key": { + "description": "Temporary Pulse API key for the trial account.", + "type": "string" + }, + "banked_tokens": { + "description": "Trial token balance granted.", + "type": "number" + }, + "details": { + "additionalProperties": true, + "description": "Additional structured context from Pulse.", + "type": "object" + }, + "error": { + "description": "Machine-readable error code.", + "type": "string" + }, + "estimate_path": { + "description": "REST path for free estimates.", + "type": "string" + }, + "expires_at": { + "description": "ISO timestamp when the temporary key expires.", + "type": "string" + }, + "message": { + "description": "Human-readable recovery guidance.", + "type": "string" + }, + "retryable": { + "description": "Whether the caller may retry after changing state or waiting.", + "type": "boolean" + }, + "upgrade_path": { + "description": "Path for converting to an account.", + "type": "string" + }, + "usage_note": { + "description": "Limits and usage guidance for the trial.", + "type": "string" + } +} - added
Output schema / requiredAdded value: +[]
1 tool update
- Added
start_trial
7 tool updates
- Changed
analyze_track1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
estimate_cost1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
get_job_status1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
get_token_balance1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
list_token_packs1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
purchase_token_pack1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "type": "object" +}
- Changed
request_payment_link1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "type": "object" +}
1 tool update
- Changed
get_job_status1 field changed- added
Input schema / properties / include_waveform_imageAdded value: +{ + "description": "Optional. Defaults to true. When the job has waveform data, include a server-rendered SVG as MCP image content so the client can display it without fetching a URL.", + "type": "boolean" +}
1 tool update
- Changed
get_job_status1 field changed- added
Input schema / properties / include_waveform_dataAdded value: +{ + "description": "Optional. Defaults to false so chat agents receive a compact waveform summary plus result_url. Set true only if raw waveform samples are needed.", + "type": "boolean" +}
Related MCP Connectors
Search 2M+ licensed production-music tracks, find similar ones by track or audio, share pick lists.
Royalty-free music fitted to your length: find, generate, adjust and download tracks and stems.
Generate, edit and stream royalty-free music, or search a licensed catalogue.
Search 18,594 production-music cues by mood, sound and exact runtime. Instant preview links.
Related MCP Servers
- AlicenseAqualityCmaintenanceAutonomous music intelligence & A&R qualification engine. Extracts acoustic metadata (BPM, key, mood), scores real-time Spotify streaming traction, and detects AI-generated audio (Suno/Udio).4886 npmMIT
- FlicenseNot gradedqualityBmaintenanceAnalyzes audio files to extract exact, reproducible measurements like loudness, tempo, key, spectral balance, and clipping for LLM-based DAW control.-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to analyze audio files, extracting tempo, key, beat drops, volume surges, high tones, loudness, brightness, and structure, and returning structured JSON and visualizations.2MIT
- FlicenseNot gradedqualityAmaintenanceEnables agents to ingest local or URL video clips and have the footage itself analyzed for mood, pace, speech, and scene cuts, returning a shortlist of license-safe royalty-free or Creative Commons BGM tracks with attribution printed on every row. Also produces 12–20s hook windows, beat-snapped cut suggestions, mix previews, and ready-to-run ffmpeg ducking specs, with optional batch analysis and reusable brand kits.-
Glama MCP Gateway
Add one secure layer between your agents and this server.