{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-06T17:19:22.135Z","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp","markdownUrl":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp.md","server":{"slug":"ae-easyvoice-tts","name":"EasyVoice text to speech","registryName":"ae.easyvoice/tts","description":"Hosted text-to-speech MCP server: 66 voices in 9 languages, long-form narration, podcasts.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"api-mcp","type":"remote","identifier":"https://easyvoice.ae/api/mcp","withdrawn":false,"url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp","version":"1.0.0","transport":null,"scoredAt":"2026-11-06T04:13:25.571Z"},"score":{"total":88,"tier":"high trust","status":"scored","weekDelta":3,"history":[{"date":"2026-11-06","total":88},{"date":"2026-11-05","total":88},{"date":"2026-11-04","total":87},{"date":"2026-11-03","total":87},{"date":"2026-11-02","total":86},{"date":"2026-11-01","total":86},{"date":"2026-10-31","total":85},{"date":"2026-10-30","total":85},{"date":"2026-10-29","total":85},{"date":"2026-10-28","total":84},{"date":"2026-10-27","total":84},{"date":"2026-10-26","total":83},{"date":"2026-10-25","total":83},{"date":"2026-10-24","total":82},{"date":"2026-10-23","total":82},{"date":"2026-10-22","total":81},{"date":"2026-10-21","total":81},{"date":"2026-10-20","total":81},{"date":"2026-10-19","total":80},{"date":"2026-10-18","total":80},{"date":"2026-10-17","total":79},{"date":"2026-10-16","total":78},{"date":"2026-10-15","total":78},{"date":"2026-10-14","total":78},{"date":"2026-10-13","total":77},{"date":"2026-10-12","total":77}]},"categories":[{"name":"Endpoint Security","score":94,"verdict":"fail","reasons":["The endpoint's TLS certificate is valid, in date, and uses a strong key.","Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.","HTTPS is enforced; there's no plaintext access path.","The HSTS (Strict-Transport-Security) header is present.","DNSSEC check failed: this domain isn't protected by DNSSEC.","The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents."],"codes":[{"code":"tls.valid","args":{}},{"code":"auth.rfc9728_invoke","args":{}},{"code":"https.enforced","args":{}},{"code":"headers.hsts_present","args":{}},{"code":"dnssec.absent","args":{}},{"code":"auth.registration_dcr_only","args":{}}]},{"name":"Transport & Reachability","score":100,"verdict":"pass","reasons":["Verified streamable-http transport via a live MCP handshake."],"codes":[{"code":"transport.verified","args":{"transport":"streamable-http"}}]},{"name":"Schema Quality & AI Usability","score":64,"verdict":"fail","reasons":["AI-judged instruction clarity (good).","Context-footprint check failed: tool/resource definitions use about 1402 tokens (~200/item across 7 items; 7 tools + 0 resources), over budget; trim descriptions and params.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.ai_quality","args":{"band":"good"}},{"code":"schema.footprint_heavy","args":{"avg":"200","items":"7","tools":"7","tokens":"1402","resources":"0"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":83,"verdict":"partial","reasons":["Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses."],"codes":[{"code":"stability.building_history","args":{"days":"25"}}]},{"name":"Tool Coverage","score":93,"verdict":"partial","reasons":["100% of tools have a non-trivial description (not blank, and not just the tool's name).","75% of tool parameters carry a description.","Structured output schemas are declared (100% of tools); any adoption earns full credit."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"75"}},{"code":"toolquality.output_present","args":{"pct":"100"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","We read all 7 captured tool definition(s), and no name or description among them implies an irreversible operation.","An AI judge read all 8 captured unit(s) of tool text and found none that tries to manipulate the model reading it."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_none","args":{"tools":"7"}},{"code":"toolsafety.manipulation_clean","args":{"units":"8","judged":"8"}}]},{"name":"Capabilities","score":100,"verdict":"pass","reasons":["Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28."],"codes":[{"code":"protocol.supported","args":{"latest":"2026-07-28","version":"2025-11-25"}}]}],"inconclusive":[],"malware":[],"components":[{"slug":"api-mcp","type":"remote","identifier":"https://easyvoice.ae/api/mcp","withdrawn":false,"score":88,"current":true,"url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp","markdownUrl":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp.md"}],"facts":[{"label":"Endpoint","value":"https://easyvoice.ae/api/mcp"},{"label":"Transports","value":"streamable-http"},{"label":"Auth","value":"required"},{"label":"Version","value":"1.0.0"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"text_to_speech","title":"Text to Speech","description":"Convert text to a downloadable MP3 or WAV audio file with one of EasyVoice's 66 neural voices or your ready cloned voice_* ids (Pro or active 7-day pass; English). Returns a hosted audio URL (no inline audio). Per-call limit: 8,000 characters (4,000 for Arabic ar_* voices; 2,000 for clones) — text over the limit is automatically queued as a background job instead of erroring; poll get_job_status with the returned job_id for the result. Free keys can use the 12 free voices; Pro ($9.99/mo) unlocks the full catalog. A Pro account past the fair-use line is paced in characters a minute: a call may wait up to 20 seconds, and one that would wait longer returns a tool error saying when to retry.","inputs":[{"name":"format","type":"string","required":false,"description":null},{"name":"speed","type":"number","required":false,"description":null},{"name":"text","type":"string","required":true,"description":"The text to speak."},{"name":"voice","type":"string","required":false,"description":"Catalog voice id or your ready cloned voice_* id. Call list_voices."}],"outputs":[{"name":"audio_url","type":"string","required":true,"description":null},{"name":"characters","type":"number","required":true,"description":null},{"name":"format","type":"string","required":true,"description":null},{"name":"remaining_free_chars_today","type":"number","required":false,"description":null},{"name":"voice","type":"string","required":true,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":225},{"name":"list_voices","title":"List Voices","description":"List all 66 EasyVoice catalog voices (id, name, language, accent, gender, free/pro tier) plus this key's cloned voices. Call this before text_to_speech or create_podcast to pick voice ids.","inputs":[],"outputs":[{"name":"cloned","type":"array","required":true,"description":null},{"name":"plan","type":"string","required":true,"description":null},{"name":"voices","type":"array","required":true,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":55},{"name":"get_usage","title":"Get Usage","description":"Check this API key's plan and usage. Free keys see today's used/remaining characters (shared 5,000/day pool, resets at midnight UTC), the 20 requests/minute rate limit and 2-concurrent cap. Pro keys are unlimited (fair use: 10M characters per rolling 30 days, then slowed to 30 requests and 10,000 characters a minute, 10 and 3,000 past 20M, on every surface -- never blocked or billed) at 60 requests/minute.","inputs":[],"outputs":[{"name":"concurrency_limit","type":"number","required":false,"description":null},{"name":"fair_use_chars_per_month","type":"number","required":false,"description":null},{"name":"limit","type":"number","required":false,"description":null},{"name":"plan","type":"string","required":true,"description":null},{"name":"remaining","type":"number","required":false,"description":null},{"name":"reset_at","type":"string","required":false,"description":null},{"name":"rpm_limit","type":"number","required":true,"description":null},{"name":"unlimited","type":"boolean","required":false,"description":null},{"name":"used","type":"number","required":false,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":115},{"name":"generate_long_form","title":"Generate Long-Form Narration","description":"Generate long-form narration (up to 500,000 characters ≈ 9 hours of audio) as an async job. Requires a Pro subscription key. Kokoro narration voices only — Arabic (ar_*) and cloned (voice_*) voices are rejected by the Long-Form engine. Returns a job id — poll get_job_status; parts render progressively and audio_url appears when completed.","inputs":[{"name":"format","type":"string","required":false,"description":null},{"name":"input","type":"string","required":true,"description":"The full script, up to 500,000 characters."},{"name":"pitch","type":"number","required":false,"description":"Pitch shift in semitones (-4 to 4)."},{"name":"speed","type":"number","required":false,"description":null},{"name":"tone","type":"string","required":false,"description":"Tone preset."},{"name":"voice","type":"string","required":false,"description":"Kokoro voice id — call list_voices for the catalog."}],"outputs":[{"name":"input_chars","type":"number","required":true,"description":null},{"name":"job_id","type":"string","required":true,"description":null},{"name":"status","type":"string","required":true,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":165},{"name":"create_podcast","title":"Create Podcast Episode","description":"Create a two-host (A/B) podcast episode as an async job. Requires a Pro subscription key. Up to 60 segments; combined text up to 30,000 characters. voice_a and voice_b set the two speaker voices — your READY cloned voice_* ids are allowed. Returns a job id — poll get_job_status.","inputs":[{"name":"format","type":"string","required":false,"description":null},{"name":"segments","type":"array","required":true,"description":"Alternating dialogue segments (max 60)."},{"name":"voice_a","type":"string","required":true,"description":"Voice id for speaker A — catalog voice or one of your READY cloned voice_* ids."},{"name":"voice_b","type":"string","required":true,"description":"Voice id for speaker B."}],"outputs":[{"name":"job_id","type":"string","required":true,"description":null},{"name":"status","type":"string","required":true,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":136},{"name":"clone_voice","title":"Clone a Voice","description":"Enroll a custom cloned voice from an audio sample (async). Requires a Pro or active 7-day pass key. Provide exactly one of audio_base64 or audio_url (https). Sample limits: 10 MB max upload; wav, mp3 or m4a; a 10–30 second clean single-speaker recording (enrollment rejects clips shorter than 10 or longer than 30 seconds; trim longer recordings first). Account limits: maximum 3 cloned voices, 5 enrollments per day. Returns a voice_id with status \"enrolling\" — check list_voices until its status is \"ready\" (there is no job to poll), then use it in text_to_speech (Pro or active 7-day pass), create_podcast (Pro key), or POST /api/v1/audio/speech (REST, same key).","inputs":[{"name":"audio_base64","type":"string","required":false,"description":"Base64-encoded audio sample (10 MB max decoded)."},{"name":"audio_url","type":"string","required":false,"description":"https URL to the audio sample — fetched server-side, same 10 MB bound."},{"name":"consent","type":"boolean","required":true,"description":"Required attestation: you confirm you have the recording rights to this audio sample. The server rejects anything but an explicit true."},{"name":"mime_type","type":"string","required":false,"description":"Sample MIME type — wav, mp3 and m4a are accepted (the server enforces the exact allowlist)."},{"name":"name","type":"string","required":true,"description":"Display name for the cloned voice."}],"outputs":[{"name":"status","type":"string","required":true,"description":null},{"name":"voice_id","type":"string","required":true,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":299},{"name":"get_job_status","title":"Get Job Status","description":"Check the status of a long-form, podcast or tts job owned by this key. Returns status plus audio URL(s) when completed. Audio links are not guaranteed to persist — download promptly.","inputs":[{"name":"job_id","type":"string","required":true,"description":"Job id returned by an async tool."}],"outputs":[{"name":"audio_url","type":"string|null","required":false,"description":null},{"name":"id","type":"string","required":true,"description":null},{"name":"status","type":"string","required":true,"description":null}],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":63}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-06T04:13:25.000Z","track":"remote","endpoint":"https://easyvoice.ae/api/mcp","declaredUrl":null,"truncated":false,"tls":{"outcome":"valid","label":"Valid","version":"TLS 1.3","cipherSuite":"TLS_AES_128_GCM_SHA256","chainError":null,"certificates":[{"subject":"CN=easyvoice.ae","issuer":"CN=YE1,O=Let's Encrypt,C=US","notBefore":"2026-09-24T19:11:13Z","notAfter":"2026-12-23T19:11:12Z","keyType":"ECDSA","keyBits":256,"isCa":false},{"subject":"CN=YE1,O=Let's Encrypt,C=US","issuer":"CN=Root YE,O=ISRG,C=US","notBefore":"2025-09-03T00:00:00Z","notAfter":"2028-09-02T23:59:59Z","keyType":"ECDSA","keyBits":384,"isCa":true},{"subject":"CN=Root YE,O=ISRG,C=US","issuer":"CN=ISRG Root X2,O=Internet Security Research Group,C=US","notBefore":"2026-05-13T00:00:00Z","notAfter":"2032-09-02T23:59:59Z","keyType":"ECDSA","keyBits":384,"isCa":true},{"subject":"CN=ISRG Root X2,O=Internet Security Research Group,C=US","issuer":"CN=ISRG Root X1,O=Internet Security Research Group,C=US","notBefore":"2026-05-13T00:00:00Z","notAfter":"2032-09-02T23:59:59Z","keyType":"ECDSA","keyBits":384,"isCa":true}]},"dnssec":{"result":"insecure","label":"Not signed","name":"easyvoice.ae.","steps":[{"zone":".","outcome":"verified","label":"Verified"},{"zone":"ae.","outcome":"insecure_proven","label":"Unsigned (proven)"}]},"auth":{"outcome":"enforced_validated","label":"Enforced and verified","gate":"invoke","gateLabel":"On tool calls","status":200,"authorizationServers":["https://easyvoice.ae"]},"httpsRedirect":{"outcome":"https_enforced","label":"HTTPS enforced","status":301},"transports":[{"transport":"streamable-http","outcome":"verified","label":"Verified","status":200,"followed":false}],"provenance":null,"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-10-12","recent":[{"id":"chg_01a1af0f-b917-704c-ae2a-a665902c50c9","kind":"score.rubric_changed","summary":"We updated how we score, so this day's move reflects our rubric, not a change to the server","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-06","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a1af0f-b917-704c-ae2a-a665902c50c9"},{"id":"chg_01a1a9ed-2ad4-7af0-a45f-1719d4fc3373","kind":"score.total_changed","summary":"Trust score (87 → 88)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a1a9ed-2ad4-7af0-a45f-1719d4fc3373"},{"id":"chg_01a19f92-6b63-73a5-8227-d85663d32669","kind":"score.total_changed","summary":"Trust score (86 → 87)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a19f92-6b63-73a5-8227-d85663d32669"},{"id":"chg_01a19546-17ef-785d-b9ba-2c23bfe903e5","kind":"score.total_changed","summary":"Trust score (85 → 86)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a19546-17ef-785d-b9ba-2c23bfe903e5"},{"id":"chg_01a185d2-78b9-7709-91c1-0193115fc41a","kind":"score.total_changed","summary":"Trust score (84 → 85)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-29","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a185d2-78b9-7709-91c1-0193115fc41a"},{"id":"chg_01a17b85-c126-797b-9377-727a0dfeb7cf","kind":"tool.description_changed","summary":"Tool “clone_voice” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-27","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a17b85-c126-797b-9377-727a0dfeb7cf"},{"id":"chg_01a17b85-c128-7114-97af-448830553dc2","kind":"tool.description_changed","summary":"Tool “text_to_speech” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-27","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a17b85-c128-7114-97af-448830553dc2"},{"id":"chg_01a17b85-c129-79ba-a689-6db33cf21135","kind":"param.description_changed","summary":"“text_to_speech” reworded the description of “voice”","materiality":"cosmetic","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-27","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a17b85-c129-79ba-a689-6db33cf21135"},{"id":"chg_01a17b85-c12b-7a6c-911a-a7d16297aa0a","kind":"server.instructions_changed","summary":"The server rewrote its instructions, which are the text every model session reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-27","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a17b85-c12b-7a6c-911a-a7d16297aa0a"},{"id":"chg_01a17b85-c12c-7174-9fa3-a1667e0efef1","kind":"score.total_changed","summary":"Trust score (83 → 84)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-27","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a17b85-c12c-7174-9fa3-a1667e0efef1"},{"id":"chg_01a17139-2951-7dae-a750-8dbd19e8a42a","kind":"score.total_changed","summary":"Trust score (82 → 83)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-25","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a17139-2951-7dae-a750-8dbd19e8a42a"},{"id":"chg_01a166ed-0342-7422-829f-9614efde05df","kind":"score.total_changed","summary":"Trust score (81 → 82)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-23","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a166ed-0342-7422-829f-9614efde05df"},{"id":"chg_01a1577a-39dd-7585-8b59-59544bd781d9","kind":"score.total_changed","summary":"Trust score (80 → 81)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-20","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a1577a-39dd-7585-8b59-59544bd781d9"},{"id":"chg_01a14d2d-a40d-7d88-9dba-e582ad8ecd3a","kind":"score.total_changed","summary":"Trust score (79 → 80)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-18","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a14d2d-a40d-7d88-9dba-e582ad8ecd3a"},{"id":"chg_01a14807-2f3d-7366-afac-053f10b6f846","kind":"server.instructions_changed","summary":"The server rewrote its instructions, which are the text every model session reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-17","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a14807-2f3d-7366-afac-053f10b6f846"},{"id":"chg_01a14807-2f40-73b2-a8cb-1f259a381c18","kind":"score.total_changed","summary":"Trust score (78 → 79)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-17","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a14807-2f40-73b2-a8cb-1f259a381c18"},{"id":"chg_01a13896-61bd-7d3f-b995-d8bbdaf34ddd","kind":"tool.description_changed","summary":"Tool “clone_voice” rewrote its description, which is the text the model reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-14","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a13896-61bd-7d3f-b995-d8bbdaf34ddd"},{"id":"chg_01a13896-61bf-7a3f-b51c-cd8cb9c77b55","kind":"server.instructions_changed","summary":"The server rewrote its instructions, which are the text every model session reads","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-14","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a13896-61bf-7a3f-b51c-cd8cb9c77b55"},{"id":"chg_01a13896-61c0-79b2-9152-e674649eafda","kind":"score.total_changed","summary":"Trust score (77 → 78)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-14","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a13896-61c0-79b2-9152-e674649eafda"},{"id":"chg_01a1336d-ffc9-7b79-a729-10d5c9f0d685","kind":"check.reverified","summary":"Stability (unverified → 0.03)","materiality":"functional","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-13","url":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp#chg-chg_01a1336d-ffc9-7b79-a729-10d5c9f0d685"}],"truncated":true,"feedUrl":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp/changelog.json"},"links":{"html":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp","markdown":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp.md","changelogJson":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp/changelog.json","changelogRss":"https://verifymcp.io/servers/ae-easyvoice-tts/api-mcp.xml","external":[{"label":"Remote endpoint","href":"https://easyvoice.ae/api/mcp"},{"label":"Authorisation metadata","href":"https://easyvoice.ae/.well-known/oauth-protected-resource/api/mcp"},{"label":"Website","href":"https://easyvoice.ae/tts-mcp-server"}]}}