Create, edit, and listen to personal podcasts from supplied text or optional online research. Manage scripts and recordings, browse your podcast library, and check your connected account's prepaid credits.
Create, edit, and listen to personal podcasts from supplied text or optional online research. Manage scripts and recordings, browse your podcast library, and check your connected account's prepaid credits.
Dayfaro creates podcasts from source text or optional online research through the API, MCP, and web workspace. Podcast generation is asynchronous. After podcast_generate or podcast_generate_audio returns an ID, immediately call podcast_player with that ID to show live progress and playback in chat. The player polls automatically; do not wait for generation or repeatedly poll in chat. Also use podcast_player when the user wants to listen to or open an existing podcast (use podcast_list to find its ID). Prefer the player to raw audio/transcript links. Set generate_audio=false to review a script before generating speech.
Discoverability
2 of 6 checks33/100
Client listings and public setup information.
mcp.json on main domain
The manifest declares this MCP server's exact endpoint.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Discover supported languages, voice names, editorial styles, and request limits before creating or recording a podcast. Returns allowed choices and research availability; read-only and does not spend credits.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Create a podcast from source text. Set request.online_search=true (optional beta, off by default) to research a topic or read supplied public URLs first; planning, retrieval and generation consume credits. Sources are returned in research.sources and shown in the player. Does not schedule or monitor. Returns the accepted podcast with its latest job; immediately call podcast_player with the returned id to display live progress and playback. Set generate_audio=false to create only an editable script. Supply a stable idempotency_key when retrying identical inputs. Invalid settings, insufficient credits, or conflicting retry keys return an error without accepting duplicate work.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
$defs › PodcastRequest › text
Source material to adapt into a podcast, or a topic/public URLs to research when online_search is enabled. Text-only generation needs substantive source material; URLs are fetched only with online_search.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
$defs › PodcastRequest › online_search
Optional beta: research the topic and/or extract supplied public URLs before writing. Planning and retrieval consume credits. False preserves text-only generation. A supplied reviewed script skips research.
Clear enough to supply this argument.
$defs › PodcastRequest › language
Language code for the spoken podcast; use podcast_options to see supported language names.
Clear enough to supply this argument.
$defs › PodcastRequest › speakers
Number of distinct speakers in the dialogue. Interviews need at least two; reviewed scripts must use exactly these speaker numbers.
Clear enough to supply this argument.
$defs › PodcastRequest › target_duration_seconds
Desired episode length in seconds, used to plan the script. Actual speech length may vary; enable fit_duration to adjust pacing.
Clear enough to supply this argument.
$defs › PodcastRequest › style
Editorial format: explainer teaches a topic, news_brief summarizes updates, conversation is dialogue, and interview uses questions and answers.
Clear enough to supply this argument.
$defs › PodcastRequest › script_instructions
Optional guidance for the script's angle, audience, structure, and tone. Omit for the selected style's defaults.
Clear enough to supply this argument.
$defs › PodcastRequest › voice_instructions
Optional delivery guidance for speech, such as calm pacing or an upbeat tone; not additional spoken text.
Clear enough to supply this argument.
$defs › PodcastRequest › voices
Distinct voice names in speaker-number order, from podcast_options.voices. Omit to assign default voices automatically.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
$defs › PodcastRequest › fit_duration
Whether to adjust audio pacing toward target_duration_seconds after synthesis; does not guarantee an exact duration.
Clear enough to supply this argument.
$defs › PodcastRequest › generate_audio
False creates an editable script without making speech requests.
Clear enough to supply this argument.
$defs › PodcastScript › title
Human-readable episode title displayed in the library and player.
Clear enough to supply this argument.
$defs › ScriptTurn › speaker
Identifies the speaking voice by its position in the podcast's voices list. Reuse the identifier across that speaker's turns.
Clear enough to supply this argument.
$defs › ScriptTurn › text
Spoken words for this turn, without speaker labels or stage directions.
Clear enough to supply this argument.
idempotency_key
Optional client-generated retry key. Reuse the same key and identical inputs to recover the original submission without duplicate work; use a new key for a new recording or episode.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Read an owned podcast's saved settings, editable script, latest job, research sources, and expiring media download links. Use before editing a script or to refresh expired links; use podcast_player for listening and automatic progress. Does not generate or spend credits. Unknown or unowned IDs return a not-found error.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
podcast_id
Episode identifier from podcast_list.items[].id or podcast_generate.id. This identifies the podcast, not its generation job.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Show an owned podcast in an interactive player with generation progress, audio playback, transcript, and research sources. Call immediately after podcast_generate or podcast_generate_audio, even while queued, or when the user wants to listen to an existing episode. Returns a public status summary; signed media and transcript data stay in component-only metadata. Read-only: never generates audio or spends credits. The widget refreshes itself; no chat polling is needed. Unknown or unowned IDs return a not-found error.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
podcast_id
Episode identifier from podcast_list.items[].id or podcast_generate.id. This identifies the podcast, not its generation job.
{
"type": "object",
"title": "PlayerSummary",
"required": [
"podcast_id",
"title",
"status",
"stage",
"progress",
"audio_available"
],
"properties": {
"stage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Stage",
"description": "Latest generation step, or null when no generation job exists."
},
"title": {
"type": "string",
"title": "Title",
"description": "Episode title displayed by the player."
},
"status": {
"enum": [
"queued",
"running",
"draft",
"ready",
"failed"
],
"type": "string",
"title": "Status",
"description": "Current episode state; the player refreshes queued and running jobs automatically."
},
"progress": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Progress",
"description": "Estimated generation percentage, or null when no job progress is available."
},
"podcast_id": {
"type": "string",
"title": "Podcast Id",
"description": "Owned podcast UUID shown by the player; reusable with podcast_get and podcast_player."
},
"audio_available": {
"type": "boolean",
"title": "Audio Available",
"description": "Whether a recording can be played, including an older recording while replacement audio generates."
}
},
"description": "Public player status; signed media URLs remain in component-only metadata."
}
Original tool metadata
{
"name": "podcast_player",
"title": "Open podcast player",
"description": "Show an owned podcast in an interactive player with generation progress, audio playback, transcript, and research sources. Call immediately after podcast_generate or podcast_generate_audio, even while queued, or when the user wants to listen to an existing episode. Returns a public status summary; signed media and transcript data stay in component-only metadata. Read-only: never generates audio or spends credits. The widget refreshes itself; no chat polling is needed. Unknown or unowned IDs return a not-found error.",
"inputSchema": {
"type": "object",
"title": "podcast_playerArguments",
"required": [
"podcast_id"
],
"properties": {
"podcast_id": {
"type": "string",
"title": "Podcast Id",
"format": "uuid",
"description": "Episode identifier from podcast_list.items[].id or podcast_generate.id. This identifies the podcast, not its generation job."
}
}
},
"outputSchema": {
"type": "object",
"title": "PlayerSummary",
"required": [
"podcast_id",
"title",
"status",
"stage",
"progress",
"audio_available"
],
"properties": {
"stage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Stage",
"description": "Latest generation step, or null when no generation job exists."
},
"title": {
"type": "string",
"title": "Title",
"description": "Episode title displayed by the player."
},
"status": {
"enum": [
"queued",
"running",
"draft",
"ready",
"failed"
],
"type": "string",
"title": "Status",
"description": "Current episode state; the player refreshes queued and running jobs automatically."
},
"progress": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Progress",
"description": "Estimated generation percentage, or null when no job progress is available."
},
"podcast_id": {
"type": "string",
"title": "Podcast Id",
"description": "Owned podcast UUID shown by the player; reusable with podcast_get and podcast_player."
},
"audio_available": {
"type": "boolean",
"title": "Audio Available",
"description": "Whether a recording can be played, including an older recording while replacement audio generates."
}
},
"description": "Public player status; signed media URLs remain in component-only metadata."
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Refresh the interactive player's status and expiring media links for an owned podcast. Intended for the app's automatic updates, not repeated chat polling; use podcast_player to open an episode. Returns a public progress summary and component-only playback metadata. Read-only; never creates a job or spends credits. Unknown or unowned IDs return a not-found error.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
podcast_id
The existing player's podcast identifier. Copy podcast_id from its last structured result or id from dayfaro/podcast component metadata to refresh that same episode.
{
"type": "object",
"title": "PlayerSummary",
"required": [
"podcast_id",
"title",
"status",
"stage",
"progress",
"audio_available"
],
"properties": {
"stage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Stage",
"description": "Latest generation step, or null when no generation job exists."
},
"title": {
"type": "string",
"title": "Title",
"description": "Episode title displayed by the player."
},
"status": {
"enum": [
"queued",
"running",
"draft",
"ready",
"failed"
],
"type": "string",
"title": "Status",
"description": "Current episode state; the player refreshes queued and running jobs automatically."
},
"progress": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Progress",
"description": "Estimated generation percentage, or null when no job progress is available."
},
"podcast_id": {
"type": "string",
"title": "Podcast Id",
"description": "Owned podcast UUID shown by the player; reusable with podcast_get and podcast_player."
},
"audio_available": {
"type": "boolean",
"title": "Audio Available",
"description": "Whether a recording can be played, including an older recording while replacement audio generates."
}
},
"description": "Public player status; signed media URLs remain in component-only metadata."
}
Original tool metadata
{
"name": "podcast_player_status",
"title": "Refresh podcast player status",
"description": "Refresh the interactive player's status and expiring media links for an owned podcast. Intended for the app's automatic updates, not repeated chat polling; use podcast_player to open an episode. Returns a public progress summary and component-only playback metadata. Read-only; never creates a job or spends credits. Unknown or unowned IDs return a not-found error.",
"inputSchema": {
"type": "object",
"title": "podcast_player_statusArguments",
"required": [
"podcast_id"
],
"properties": {
"podcast_id": {
"type": "string",
"title": "Podcast Id",
"format": "uuid",
"description": "The existing player's podcast identifier. Copy podcast_id from its last structured result or id from dayfaro/podcast component metadata to refresh that same episode."
}
}
},
"outputSchema": {
"type": "object",
"title": "PlayerSummary",
"required": [
"podcast_id",
"title",
"status",
"stage",
"progress",
"audio_available"
],
"properties": {
"stage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Stage",
"description": "Latest generation step, or null when no generation job exists."
},
"title": {
"type": "string",
"title": "Title",
"description": "Episode title displayed by the player."
},
"status": {
"enum": [
"queued",
"running",
"draft",
"ready",
"failed"
],
"type": "string",
"title": "Status",
"description": "Current episode state; the player refreshes queued and running jobs automatically."
},
"progress": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Progress",
"description": "Estimated generation percentage, or null when no job progress is available."
},
"podcast_id": {
"type": "string",
"title": "Podcast Id",
"description": "Owned podcast UUID shown by the player; reusable with podcast_get and podcast_player."
},
"audio_available": {
"type": "boolean",
"title": "Audio Available",
"description": "Whether a recording can be played, including an older recording while replacement audio generates."
}
},
"description": "Public player status; signed media URLs remain in component-only metadata."
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Browse the connected account's podcast library, newest first, to find an episode ID before opening, editing, recording, or deleting it. Returns a page of podcasts plus total, page, and limit; an empty items list means no results on that page. Read-only and does not spend credits.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
page
Library page to retrieve; increment the previous response's page to browse older episodes.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Size of the library page. Choose a small page for quick browsing and a larger page for batch work.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Replace an owned podcast's editable script and title with reviewed text. Use after podcast_get to edit a draft or revise an episode. Returns the updated podcast; keeps existing audio and marks it stale when it differs from the script. Does not generate speech or spend credits. Recording changes require podcast_generate_audio. Active generation returns a conflict; unknown or unowned IDs return not found.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
podcast_id
Episode identifier from podcast_list.items[].id or podcast_generate.id. This identifies the podcast, not its generation job.
Clear enough to supply this argument.
$defs › PodcastScript › title
Human-readable episode title displayed in the library and player.
Clear enough to supply this argument.
$defs › ScriptTurn › speaker
Identifies the speaking voice by its position in the podcast's voices list. Reuse the identifier across that speaker's turns.
Clear enough to supply this argument.
$defs › ScriptTurn › text
Spoken words for this turn, without speaker labels or stage directions.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Record an owned podcast's saved or reviewed script using selected voices. Use after reviewing a draft or editing a script; no script-generation or research call is made. Speech generation consumes credits and replaces the recording when successful. Returns the podcast with its latest job; immediately call podcast_player with its id for progress and playback. Supply idempotency_key to retry identical inputs safely. Missing scripts, active jobs, invalid settings, insufficient credits, and unowned IDs return errors.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
podcast_id
Episode identifier from podcast_list.items[].id or podcast_generate.id. This identifies the podcast, not its generation job.
Clear enough to supply this argument.
$defs › PodcastScript › title
Human-readable episode title displayed in the library and player.
Clear enough to supply this argument.
$defs › ScriptTurn › speaker
Identifies the speaking voice by its position in the podcast's voices list. Reuse the identifier across that speaker's turns.
Clear enough to supply this argument.
$defs › ScriptTurn › text
Spoken words for this turn, without speaker labels or stage directions.
Clear enough to supply this argument.
$defs › PodcastAudioRequest › voices
One distinct voice per existing speaker, in speaker-number order; names come from podcast_options. Omit to retain saved voices.
Clear enough to supply this argument.
$defs › PodcastAudioRequest › voice_instructions
Speech delivery guidance for this recording. Omit to retain the saved instructions; use an empty string to clear them.
Clear enough to supply this argument.
$defs › PodcastAudioRequest › fit_duration
Whether to adjust pacing toward the saved target duration. Omit to retain the podcast's current setting.
Clear enough to supply this argument.
idempotency_key
Optional client-generated retry key. Reuse the same key and identical inputs to recover the original submission without duplicate work; use a new key for a new recording or episode.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Permanently delete an owned podcast, its script, and its library entry, and enqueue cleanup of its recordings. Use only when the user explicitly asks to delete that episode; this cannot be undone. Returns deleted=true after removal and spends no generation credits. Active jobs must finish first; unknown or already deleted IDs return not found.
Resolve contradictions between the description, input schema, and annotations.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
podcast_id
Episode identifier from podcast_list.items[].id or podcast_generate.id. This identifies the podcast, not its generation job.
{
"type": "object",
"title": "DeletedPodcast",
"required": [
"deleted"
],
"properties": {
"deleted": {
"type": "boolean",
"const": true,
"title": "Deleted",
"description": "True after the podcast is permanently deleted and recording cleanup is queued."
}
},
"description": "Acknowledgement that the owned podcast was deleted."
}
Original tool metadata
{
"name": "podcast_delete",
"title": "Delete a podcast",
"description": "Permanently delete an owned podcast, its script, and its library entry, and enqueue cleanup of its recordings. Use only when the user explicitly asks to delete that episode; this cannot be undone. Returns deleted=true after removal and spends no generation credits. Active jobs must finish first; unknown or already deleted IDs return not found.",
"inputSchema": {
"type": "object",
"title": "podcast_deleteArguments",
"required": [
"podcast_id"
],
"properties": {
"podcast_id": {
"type": "string",
"title": "Podcast Id",
"format": "uuid",
"description": "Episode identifier from podcast_list.items[].id or podcast_generate.id. This identifies the podcast, not its generation job."
}
}
},
"outputSchema": {
"type": "object",
"title": "DeletedPodcast",
"required": [
"deleted"
],
"properties": {
"deleted": {
"type": "boolean",
"const": true,
"title": "Deleted",
"description": "True after the podcast is permanently deleted and recording cleanup is queued."
}
},
"description": "Acknowledgement that the owned podcast was deleted."
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Read the connected Dayfaro account's ID, email, and prepaid credit balance. Use to confirm which account is connected; use account_credits when only the balance is needed. Returns the account identity and wallet snapshot, makes no purchases, and spends no generation credits. Requires an authenticated connection.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Check the connected account's prepaid wallet before generating a script or recording audio. Returns the customer-facing balance_credits, compatibility billing fields, and unlimited status. A zero remaining balance blocks paid generation unless unlimited is true. Read-only: does not purchase, top up, or spend credits. Requires an authenticated connection.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
{
"type": "object",
"title": "CreditBalance",
"required": [
"plan",
"currency",
"balance_usd",
"balance_credits",
"remaining",
"unit_usd",
"cost_multiplier",
"renews_at",
"unlimited"
],
"properties": {
"plan": {
"type": "string",
"const": "prepaid",
"title": "Plan",
"description": "Wallet plan used for podcast generation."
},
"currency": {
"type": "string",
"const": "USD",
"title": "Currency",
"description": "Currency of the compatibility balance_usd field."
},
"unit_usd": {
"type": "number",
"title": "Unit Usd",
"description": "US dollar value of one internal micro-unit; not the price of one displayed credit."
},
"remaining": {
"type": "integer",
"title": "Remaining",
"description": "Nonnegative remaining internal micro-units; divide by 10,000 for customer-facing credits. Zero blocks paid generation unless unlimited is true."
},
"renews_at": {
"type": "null",
"title": "Renews At",
"description": "Always null for prepaid wallets; credits have no monthly renewal date."
},
"unlimited": {
"type": "boolean",
"title": "Unlimited",
"description": "Whether this account is exempt from generation balance limits."
},
"balance_usd": {
"type": "number",
"title": "Balance Usd",
"description": "Wallet value in US dollars; prefer balance_credits for the customer-facing credit amount."
},
"balance_credits": {
"type": "number",
"title": "Balance Credits",
"description": "Current customer-facing credit balance. Generation consumes credits; this tool does not spend them."
},
"cost_multiplier": {
"type": "integer",
"title": "Cost Multiplier",
"description": "Wallet's generation billing multiplier, pinned separately when each job is admitted."
}
},
"description": "Current prepaid wallet balance; this result makes no purchase."
}
Original tool metadata
{
"name": "account_credits",
"title": "Get your credit balance",
"description": "Check the connected account's prepaid wallet before generating a script or recording audio. Returns the customer-facing balance_credits, compatibility billing fields, and unlimited status. A zero remaining balance blocks paid generation unless unlimited is true. Read-only: does not purchase, top up, or spend credits. Requires an authenticated connection.",
"inputSchema": {
"type": "object",
"title": "account_creditsArguments",
"properties": {}
},
"outputSchema": {
"type": "object",
"title": "CreditBalance",
"required": [
"plan",
"currency",
"balance_usd",
"balance_credits",
"remaining",
"unit_usd",
"cost_multiplier",
"renews_at",
"unlimited"
],
"properties": {
"plan": {
"type": "string",
"const": "prepaid",
"title": "Plan",
"description": "Wallet plan used for podcast generation."
},
"currency": {
"type": "string",
"const": "USD",
"title": "Currency",
"description": "Currency of the compatibility balance_usd field."
},
"unit_usd": {
"type": "number",
"title": "Unit Usd",
"description": "US dollar value of one internal micro-unit; not the price of one displayed credit."
},
"remaining": {
"type": "integer",
"title": "Remaining",
"description": "Nonnegative remaining internal micro-units; divide by 10,000 for customer-facing credits. Zero blocks paid generation unless unlimited is true."
},
"renews_at": {
"type": "null",
"title": "Renews At",
"description": "Always null for prepaid wallets; credits have no monthly renewal date."
},
"unlimited": {
"type": "boolean",
"title": "Unlimited",
"description": "Whether this account is exempt from generation balance limits."
},
"balance_usd": {
"type": "number",
"title": "Balance Usd",
"description": "Wallet value in US dollars; prefer balance_credits for the customer-facing credit amount."
},
"balance_credits": {
"type": "number",
"title": "Balance Credits",
"description": "Current customer-facing credit balance. Generation consumes credits; this tool does not spend them."
},
"cost_multiplier": {
"type": "integer",
"title": "Cost Multiplier",
"description": "Wallet's generation billing multiplier, pinned separately when each job is admitted."
}
},
"description": "Current prepaid wallet balance; this result makes no purchase."
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01Podcast listBrowse the connected account's podcast library, newest first, to find an episode ID before opening, editing, recording, or deleting it.
02Get podcast generation optionsDiscover supported languages, voice names, editorial styles, and request limits before creating or recording a podcast.
03Get your credit balanceCheck the connected account's prepaid wallet before generating a script or recording audio.
04Account infoRead the connected Dayfaro account's ID, email, and prepaid credit balance.
05Podcast playerShow an owned podcast in an interactive player with generation progress, audio playback, transcript, and research sources.
Want to run these tasks against your MCP server with us?
Dayfaro setup, tools, quality score, publishing readiness, and alternatives.
How do I add Dayfaro to Claude, ChatGPT, or Cursor?
Add Dayfaro to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://api.dayfaro.com/v1/mcp.
Is Dayfaro MCP ready for ChatGPT and Claude?
As of October 24, 2026, Dayfaro scores 100/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is Dayfaro's MCP tool documentation?
As of October 24, 2026, Dayfaro scores 96/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 11 of 11 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to Dayfaro?
As of October 24, 2026, alternatives to Dayfaro in design-creative on the Manufact MCP leaderboard include MotionVid, Reel Breakdown, VideoGen, Image Generation, and Motion.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.