{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_qw7cx7rpfvza","handle":"hanolab-voice-conversion","url":"https://wellknown.network/agents/hanolab-voice-conversion","links":{"self":"https://wellknown.network/agents/hanolab-voice-conversion/record.json","html":"https://wellknown.network/agents/hanolab-voice-conversion","markdown":"https://wellknown.network/agents/hanolab-voice-conversion/record.md","api":"https://wellknown.network/api/v1/agents/hanolab-voice-conversion","status":"https://wellknown.network/api/v1/agents/hanolab-voice-conversion/status","claim":"https://wellknown.network/agents/hanolab-voice-conversion/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/hanolab-voice-conversion/claim.json","badge":"https://wellknown.network/agents/hanolab-voice-conversion/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/hanolab-voice-conversion/history","tools":"https://wellknown.network/api/v1/agents/hanolab-voice-conversion/tools"},"ard":{"identifier":"urn:air:hanolab.com:server:hanolab-voice-conversion","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"HanoLab Voice Conversion","summary":"Convert uploaded speech or singing with your saved HanoLab voices, using OAuth and credit quotes.","description":"Convert uploaded speech or singing with your saved HanoLab voices, using OAuth and credit quotes.","publisher":{"name":"obrr-hhx","url":null},"homepage":"https://hanolab.com/docs/mcp?utm_source=mcp_registry&utm_medium=referral&utm_campaign=directory_202610","repository":"https://github.com/hanolab-ai/hanolab-integrations","version":"1.0.2","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://hanolab.com/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-14T14:10:09.803664Z","publishedAt":"2026-10-14T14:10:09.803664Z","registryName":"io.github.obrr-hhx/hanolab"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"documents.conversion","name":"Document Conversion","confidence":1,"provenance":"derived"},{"slug":"commerce.pricing","name":"Pricing & Quotes","confidence":0.859,"provenance":"derived"},{"slug":"infra.browser-automation","name":"Browser Automation","confidence":0.51,"provenance":"derived"}],"categories":["commerce","documents","infra"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 4h ago.","lastOkAt":"2026-10-30T04:25:22.369Z","lastProbedAt":"2026-10-30T04:25:22.369Z","statusComputedAt":"2026-10-30T04:28:04.977Z","reliability30d":{"probes":47,"successRate":1,"p50Ms":645,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":47,"ok":47,"authBoundaryOk":0,"serviceOk":47,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-30T04:25:22.369Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":477,"error":null,"detail":{"tools":[{"name":"get_profile","description":"Identify the HanoLab account connected to these tools."},{"name":"get_credits","description":"Read the connected account’s plan and available credits. Does not purchase credits."},{"name":"list_voices","description":"List the connected user’s own saved voices and whether they are ready. If none are ready, open voicelab to create one."},{"name":"create_upload_link","description":"Create a private one-hour browser upload link. Ask the user to open it, choose an audio file or MP4 and return here. Requires the same HanoLab account; no credi"},{"name":"list_audio","description":"List recent audio uploaded through this connection. Use the exact audio_id, never a local path or an arbitrary URL."},{"name":"prepare_voice_conversion","description":"Prepare a fixed quote for uploaded audio and a ready owned voice. No credits are spent. Explain estimated_credits, obtain the user’s budget and explicit confirm"},{"name":"convert_voice","description":"Spend HanoLab credits to submit the prepared conversion ONLY after the user confirms its cost and budget. Reuse the exact quote_id after interruption: repeated "},{"name":"get_task","description":"Check an owned task and return completed audio links. Refreshes worker status and may persist completion or a failure refund. Poll about every 10 seconds; do no"},{"name":"list_conversions","description":"Find recent conversions submitted with this connection. Use get_task to refresh a task. This does not start new tasks."}],"toolCount":9,"toolsHash":"f7cb9eda9d09b746a661dd0d4eb37e2d27a88506d3da6f547d881d5357b1a0df","serverName":"HanoLab","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-29T20:27:21.437Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1154,"error":null,"detail":{"tools":[{"name":"get_profile","description":"Identify the HanoLab account connected to these tools."},{"name":"get_credits","description":"Read the connected account’s plan and available credits. Does not purchase credits."},{"name":"list_voices","description":"List the connected user’s own saved voices and whether they are ready. If none are ready, open voicelab to create one."},{"name":"create_upload_link","description":"Create a private one-hour browser upload link. Ask the user to open it, choose an audio file or MP4 and return here. Requires the same HanoLab account; no credi"},{"name":"list_audio","description":"List recent audio uploaded through this connection. Use the exact audio_id, never a local path or an arbitrary URL."},{"name":"prepare_voice_conversion","description":"Prepare a fixed quote for uploaded audio and a ready owned voice. No credits are spent. Explain estimated_credits, obtain the user’s budget and explicit confirm"},{"name":"convert_voice","description":"Spend HanoLab credits to submit the prepared conversion ONLY after the user confirms its cost and budget. Reuse the exact quote_id after interruption: repeated "},{"name":"get_task","description":"Check an owned task and return completed audio links. Refreshes worker status and may persist completion or a failure refund. Poll about every 10 seconds; do no"},{"name":"list_conversions","description":"Find recent conversions submitted with this connection. Use get_task to refresh a task. This does not start new tasks."}],"toolCount":9,"toolsHash":"f7cb9eda9d09b746a661dd0d4eb37e2d27a88506d3da6f547d881d5357b1a0df","serverName":"HanoLab","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-29T12:23:41.641Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":211,"error":null,"detail":{"tools":[{"name":"get_profile","description":"Identify the HanoLab account connected to these tools."},{"name":"get_credits","description":"Read the connected account’s plan and available credits. Does not purchase credits."},{"name":"list_voices","description":"List the connected user’s own saved voices and whether they are ready. If none are ready, open voicelab to create one."},{"name":"create_upload_link","description":"Create a private one-hour browser upload link. Ask the user to open it, choose an audio file or MP4 and return here. Requires the same HanoLab account; no credi"},{"name":"list_audio","description":"List recent audio uploaded through this connection. Use the exact audio_id, never a local path or an arbitrary URL."},{"name":"prepare_voice_conversion","description":"Prepare a fixed quote for uploaded audio and a ready owned voice. No credits are spent. Explain estimated_credits, obtain the user’s budget and explicit confirm"},{"name":"convert_voice","description":"Spend HanoLab credits to submit the prepared conversion ONLY after the user confirms its cost and budget. Reuse the exact quote_id after interruption: repeated "},{"name":"get_task","description":"Check an owned task and return completed audio links. Refreshes worker status and may persist completion or a failure refund. Poll about every 10 seconds; do no"},{"name":"list_conversions","description":"Find recent conversions submitted with this connection. Use get_task to refresh a task. This does not start new tasks."}],"toolCount":9,"toolsHash":"f7cb9eda9d09b746a661dd0d4eb37e2d27a88506d3da6f547d881d5357b1a0df","serverName":"HanoLab","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-29T04:26:47.273Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1327,"error":null,"detail":{"tools":[{"name":"get_profile","description":"Identify the HanoLab account connected to these tools."},{"name":"get_credits","description":"Read the connected account’s plan and available credits. Does not purchase credits."},{"name":"list_voices","description":"List the connected user’s own saved voices and whether they are ready. If none are ready, open voicelab to create one."},{"name":"create_upload_link","description":"Create a private one-hour browser upload link. Ask the user to open it, choose an audio file or MP4 and return here. Requires the same HanoLab account; no credi"},{"name":"list_audio","description":"List recent audio uploaded through this connection. Use the exact audio_id, never a local path or an arbitrary URL."},{"name":"prepare_voice_conversion","description":"Prepare a fixed quote for uploaded audio and a ready owned voice. No credits are spent. Explain estimated_credits, obtain the user’s budget and explicit confirm"},{"name":"convert_voice","description":"Spend HanoLab credits to submit the prepared conversion ONLY after the user confirms its cost and budget. Reuse the exact quote_id after interruption: repeated "},{"name":"get_task","description":"Check an owned task and return completed audio links. Refreshes worker status and may persist completion or a failure refund. Poll about every 10 seconds; do no"},{"name":"list_conversions","description":"Find recent conversions submitted with this connection. Use get_task to refresh a task. This does not start new tasks."}],"toolCount":9,"toolsHash":"f7cb9eda9d09b746a661dd0d4eb37e2d27a88506d3da6f547d881d5357b1a0df","serverName":"HanoLab","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-28T21:32:41.958Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1195,"error":null,"detail":{"tools":[{"name":"get_profile","description":"Identify the HanoLab account connected to these tools."},{"name":"get_credits","description":"Read the connected account’s plan and available credits. Does not purchase credits."},{"name":"list_voices","description":"List the connected user’s own saved voices and whether they are ready. If none are ready, open voicelab to create one."},{"name":"create_upload_link","description":"Create a private one-hour browser upload link. Ask the user to open it, choose an audio file or MP4 and return here. Requires the same HanoLab account; no credi"},{"name":"list_audio","description":"List recent audio uploaded through this connection. Use the exact audio_id, never a local path or an arbitrary URL."},{"name":"prepare_voice_conversion","description":"Prepare a fixed quote for uploaded audio and a ready owned voice. No credits are spent. Explain estimated_credits, obtain the user’s budget and explicit confirm"},{"name":"convert_voice","description":"Spend HanoLab credits to submit the prepared conversion ONLY after the user confirms its cost and budget. Reuse the exact quote_id after interruption: repeated "},{"name":"get_task","description":"Check an owned task and return completed audio links. Refreshes worker status and may persist completion or a failure refund. Poll about every 10 seconds; do no"},{"name":"list_conversions","description":"Find recent conversions submitted with this connection. Use get_task to refresh a task. This does not start new tasks."}],"toolCount":9,"toolsHash":"f7cb9eda9d09b746a661dd0d4eb37e2d27a88506d3da6f547d881d5357b1a0df","serverName":"HanoLab","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-28T14:29:30.571Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":968,"error":null,"detail":{"tools":[{"name":"get_profile","description":"Identify the HanoLab account connected to these tools."},{"name":"get_credits","description":"Read the connected account’s plan and available credits. Does not purchase credits."},{"name":"list_voices","description":"List the connected user’s own saved voices and whether they are ready. If none are ready, open voicelab to create one."},{"name":"create_upload_link","description":"Create a private one-hour browser upload link. Ask the user to open it, choose an audio file or MP4 and return here. Requires the same HanoLab account; no credi"},{"name":"list_audio","description":"List recent audio uploaded through this connection. Use the exact audio_id, never a local path or an arbitrary URL."},{"name":"prepare_voice_conversion","description":"Prepare a fixed quote for uploaded audio and a ready owned voice. No credits are spent. Explain estimated_credits, obtain the user’s budget and explicit confirm"},{"name":"convert_voice","description":"Spend HanoLab credits to submit the prepared conversion ONLY after the user confirms its cost and budget. Reuse the exact quote_id after interruption: repeated "},{"name":"get_task","description":"Check an owned task and return completed audio links. Refreshes worker status and may persist completion or a failure refund. Poll about every 10 seconds; do no"},{"name":"list_conversions","description":"Find recent conversions submitted with this connection. Use get_task to refresh a task. This does not start new tasks."}],"toolCount":9,"toolsHash":"f7cb9eda9d09b746a661dd0d4eb37e2d27a88506d3da6f547d881d5357b1a0df","serverName":"HanoLab","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-28T07:29:42.463Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":249,"error":null,"detail":{"tools":[{"name":"get_profile","description":"Identify the HanoLab account connected to these tools."},{"name":"get_credits","description":"Read the connected account’s plan and available credits. Does not purchase credits."},{"name":"list_voices","description":"List the connected user’s own saved voices and whether they are ready. If none are ready, open voicelab to create one."},{"name":"create_upload_link","description":"Create a private one-hour browser upload link. Ask the user to open it, choose an audio file or MP4 and return here. Requires the same HanoLab account; no credi"},{"name":"list_audio","description":"List recent audio uploaded through this connection. Use the exact audio_id, never a local path or an arbitrary URL."},{"name":"prepare_voice_conversion","description":"Prepare a fixed quote for uploaded audio and a ready owned voice. No credits are spent. Explain estimated_credits, obtain the user’s budget and explicit confirm"},{"name":"convert_voice","description":"Spend HanoLab credits to submit the prepared conversion ONLY after the user confirms its cost and budget. Reuse the exact quote_id after interruption: repeated "},{"name":"get_task","description":"Check an owned task and return completed audio links. Refreshes worker status and may persist completion or a failure refund. Poll about every 10 seconds; do no"},{"name":"list_conversions","description":"Find recent conversions submitted with this connection. Use get_task to refresh a task. This does not start new tasks."}],"toolCount":9,"toolsHash":"f7cb9eda9d09b746a661dd0d4eb37e2d27a88506d3da6f547d881d5357b1a0df","serverName":"HanoLab","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-28T00:33:08.912Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":962,"error":null,"detail":{"tools":[{"name":"get_profile","description":"Identify the HanoLab account connected to these tools."},{"name":"get_credits","description":"Read the connected account’s plan and available credits. Does not purchase credits."},{"name":"list_voices","description":"List the connected user’s own saved voices and whether they are ready. If none are ready, open voicelab to create one."},{"name":"create_upload_link","description":"Create a private one-hour browser upload link. Ask the user to open it, choose an audio file or MP4 and return here. Requires the same HanoLab account; no credi"},{"name":"list_audio","description":"List recent audio uploaded through this connection. Use the exact audio_id, never a local path or an arbitrary URL."},{"name":"prepare_voice_conversion","description":"Prepare a fixed quote for uploaded audio and a ready owned voice. No credits are spent. Explain estimated_credits, obtain the user’s budget and explicit confirm"},{"name":"convert_voice","description":"Spend HanoLab credits to submit the prepared conversion ONLY after the user confirms its cost and budget. Reuse the exact quote_id after interruption: repeated "},{"name":"get_task","description":"Check an owned task and return completed audio links. Refreshes worker status and may persist completion or a failure refund. Poll about every 10 seconds; do no"},{"name":"list_conversions","description":"Find recent conversions submitted with this connection. Use get_task to refresh a task. This does not start new tasks."}],"toolCount":9,"toolsHash":"f7cb9eda9d09b746a661dd0d4eb37e2d27a88506d3da6f547d881d5357b1a0df","serverName":"HanoLab","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-27T17:27:55.331Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1832,"error":null,"detail":{"tools":[{"name":"get_profile","description":"Identify the HanoLab account connected to these tools."},{"name":"get_credits","description":"Read the connected account’s plan and available credits. Does not purchase credits."},{"name":"list_voices","description":"List the connected user’s own saved voices and whether they are ready. If none are ready, open voicelab to create one."},{"name":"create_upload_link","description":"Create a private one-hour browser upload link. Ask the user to open it, choose an audio file or MP4 and return here. Requires the same HanoLab account; no credi"},{"name":"list_audio","description":"List recent audio uploaded through this connection. Use the exact audio_id, never a local path or an arbitrary URL."},{"name":"prepare_voice_conversion","description":"Prepare a fixed quote for uploaded audio and a ready owned voice. No credits are spent. Explain estimated_credits, obtain the user’s budget and explicit confirm"},{"name":"convert_voice","description":"Spend HanoLab credits to submit the prepared conversion ONLY after the user confirms its cost and budget. Reuse the exact quote_id after interruption: repeated "},{"name":"get_task","description":"Check an owned task and return completed audio links. Refreshes worker status and may persist completion or a failure refund. Poll about every 10 seconds; do no"},{"name":"list_conversions","description":"Find recent conversions submitted with this connection. Use get_task to refresh a task. This does not start new tasks."}],"toolCount":9,"toolsHash":"f7cb9eda9d09b746a661dd0d4eb37e2d27a88506d3da6f547d881d5357b1a0df","serverName":"HanoLab","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-27T10:23:15.230Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":196,"error":null,"detail":{"tools":[{"name":"get_profile","description":"Identify the HanoLab account connected to these tools."},{"name":"get_credits","description":"Read the connected account’s plan and available credits. Does not purchase credits."},{"name":"list_voices","description":"List the connected user’s own saved voices and whether they are ready. If none are ready, open voicelab to create one."},{"name":"create_upload_link","description":"Create a private one-hour browser upload link. Ask the user to open it, choose an audio file or MP4 and return here. Requires the same HanoLab account; no credi"},{"name":"list_audio","description":"List recent audio uploaded through this connection. Use the exact audio_id, never a local path or an arbitrary URL."},{"name":"prepare_voice_conversion","description":"Prepare a fixed quote for uploaded audio and a ready owned voice. No credits are spent. Explain estimated_credits, obtain the user’s budget and explicit confirm"},{"name":"convert_voice","description":"Spend HanoLab credits to submit the prepared conversion ONLY after the user confirms its cost and budget. Reuse the exact quote_id after interruption: repeated "},{"name":"get_task","description":"Check an owned task and return completed audio links. Refreshes worker status and may persist completion or a failure refund. Poll about every 10 seconds; do no"},{"name":"list_conversions","description":"Find recent conversions submitted with this connection. Use get_task to refresh a task. This does not start new tasks."}],"toolCount":9,"toolsHash":"f7cb9eda9d09b746a661dd0d4eb37e2d27a88506d3da6f547d881d5357b1a0df","serverName":"HanoLab","capabilities":["tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"get_profile","description":"Identify the HanoLab account connected to these tools."},{"name":"get_credits","description":"Read the connected account’s plan and available credits. Does not purchase credits."},{"name":"list_voices","description":"List the connected user’s own saved voices and whether they are ready. If none are ready, open voicelab to create one."},{"name":"create_upload_link","description":"Create a private one-hour browser upload link. Ask the user to open it, choose an audio file or MP4 and return here. Requires the same HanoLab account; no credi"},{"name":"list_audio","description":"List recent audio uploaded through this connection. Use the exact audio_id, never a local path or an arbitrary URL."},{"name":"prepare_voice_conversion","description":"Prepare a fixed quote for uploaded audio and a ready owned voice. No credits are spent. Explain estimated_credits, obtain the user’s budget and explicit confirm"},{"name":"convert_voice","description":"Spend HanoLab credits to submit the prepared conversion ONLY after the user confirms its cost and budget. Reuse the exact quote_id after interruption: repeated "},{"name":"get_task","description":"Check an owned task and return completed audio links. Refreshes worker status and may persist completion or a failure refund. Poll about every 10 seconds; do no"},{"name":"list_conversions","description":"Find recent conversions submitted with this connection. Use get_task to refresh a task. This does not start new tasks."}],"package":null,"toolSurface":{"id":"ts_mm88zmk9mrx3","endpointId":"ep_5qatnqk8tpjf","hash":"f7cb9eda9d09b746a661dd0d4eb37e2d27a88506d3da6f547d881d5357b1a0df","toolCount":9,"serverName":"HanoLab","serverVersion":"1.0.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-16T19:28:07.507Z","lastSeenAt":"2026-10-30T04:25:22.378Z","observations":47,"toolNames":["get_profile","get_credits","list_voices","create_upload_link","list_audio","prepare_voice_conversion","convert_voice","get_task","list_conversions"],"distinctSurfaces":1},"endpointFacts":[{"id":"ep_5qatnqk8tpjf","url":"https://hanolab.com/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-27T17:27:55.347Z","auth":{"observedAt":"2026-10-27T17:27:56.351Z","authRequired":false,"scheme":null,"resourceMetadata":{"url":"https://hanolab.com/.well-known/oauth-protected-resource/mcp","resource":"https://hanolab.com/mcp","authorizationServers":["https://hanolab.com"],"scopesSupported":["hanolab:read","hanolab:upload","hanolab:convert"]},"authorizationServer":{"url":"https://hanolab.com/.well-known/oauth-authorization-server","issuer":"https://hanolab.com","grantTypesSupported":["authorization_code","refresh_token"],"codeChallengeMethodsSupported":["S256"],"tokenEndpointAuthMethodsSupported":["none"],"dynamicClientRegistration":true,"dpopSigningAlgValuesSupported":[],"clientIdMetadataDocumentSupported":null},"conformance":{"dpop":false,"rfc8414":true,"rfc9728":true,"pkceS256":true,"clientIdMetadataDocument":false,"dynamicClientRegistration":true}},"tls":{"observedAt":"2026-10-27T17:27:56.383Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"hanolab.com","issuer":{"commonName":"YR1","organization":"Let's Encrypt"},"validFrom":"2026-10-09T18:43:21.000Z","validTo":"2027-01-07T18:43:20.000Z","daysToExpiry":69,"sanCount":1,"fingerprint256":"60:C6:26:DD:29:A1:B8:68:BF:E0:83:56:EE:90:43:F5:42:43:49:48:73:56:3A:C1:6A:2C:4A:BB:50:87:25:96"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.obrr-hhx/hanolab","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.obrr-hhx%2Fhanolab","firstSeenAt":"2026-10-16T19:19:04.562Z","fetchedAt":"2026-10-27T01:19:37.855Z","normalizedAt":"2026-10-27T01:19:37.855Z"}]},"firstSeenAt":"2026-10-16T19:19:04.562Z","updatedAt":"2026-10-30T04:29:09.758Z"}