podcast_server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DATA_DIR | No | Directory for show data: catalog, transcripts, templates, playbook, and backups. | |
| XURL_APP | No | Optional xurl app name for X posting. | |
| SITE_MODE | No | Website mode: none or astro. | |
| XURL_PATH | No | Optional path to the xurl executable or configuration. | |
| X_USERNAME | No | Optional X username for posting. | |
| DEFAULT_TAGS | No | Optional default tags for episodes. | |
| PODCAST_GUID | No | Optional Podcasting 2.0 podcast GUID. | |
| PODCAST_LINK | Yes | Podcast website link. | |
| WEBSITE_PATH | No | Path to the website repository when SITE_MODE=astro. | |
| DEVTO_API_KEY | No | Optional dev.to API key for creating companion drafts. | |
| OP3_API_TOKEN | No | Optional OP3 API token for download analytics. | |
| PODCAST_TITLE | Yes | Podcast title. | |
| R2_ACCOUNT_ID | Yes | Cloudflare R2 account ID. | |
| HF_BACKUP_REPO | No | Optional private Hugging Face dataset repository for backups. | |
| PODCAST_AUTHOR | Yes | Podcast author. | |
| R2_BUCKET_NAME | Yes | Cloudflare R2 bucket name. | |
| USE_OP3_PREFIX | No | Optional flag to enable the OP3 analytics prefix. | |
| WEBSITE_BRANCH | No | Git branch used for website deploys. | |
| X_BEARER_TOKEN | No | Optional X bearer token for X metrics. | |
| FEED_OBJECT_KEY | No | R2 object key for the RSS feed. | |
| METRICS_SOURCES | No | Optional list of enabled metrics sources. | |
| THUMBNAIL_STYLE | No | Optional thumbnail style setting. | |
| X_LOOKBACK_DAYS | No | Optional number of days to look back for X metrics. | |
| PODCAST_FEED_URL | Yes | Public RSS feed URL. | |
| R2_ACCESS_KEY_ID | Yes | Cloudflare R2 access key ID. | |
| R2_PUBLIC_DOMAIN | Yes | Public R2 custom domain for audio and feed URLs. | |
| WEBSITE_BLOG_DIR | No | Directory for generated blog pages in the website repository. | |
| WEBSITE_RSS_FILE | No | Path to the RSS feed file in the website repository. | |
| BLOG_URL_TEMPLATE | No | Optional blog post URL template containing {slug}. | |
| PODCAST_IMAGE_URL | Yes | Public cover art URL. | |
| CLOUDFLARE_ZONE_ID | No | Optional Cloudflare zone ID for analytics. | |
| YOUTUBE_TOKEN_PATH | No | Optional path to YouTube OAuth credentials. | |
| DESCRIPT_API_BEARER | No | Optional Descript API bearer token for staging episodes. | |
| EPISODE_GUID_PREFIX | Yes | Prefix used to generate permanent episode GUIDs. | |
| PODCAST_DESCRIPTION | Yes | Podcast description. | |
| PODCAST_OWNER_EMAIL | Yes | Podcast owner email. | |
| CLOUDFLARE_API_TOKEN | No | Optional Cloudflare analytics API token. | |
| R2_SECRET_ACCESS_KEY | Yes | Cloudflare R2 secret access key. | |
| WEBSITE_EPISODES_DIR | No | Directory for generated episode pages in the website repository. | |
| METRICS_BACKFILL_DAYS | No | Optional number of days to backfill metrics. | |
| SUBSTACK_COOKIES_PATH | No | Optional path to the Substack session cookie file. | |
| PODCAST_SERVER_ENV_FILE | No | Optional path to an alternate show .env file. | |
| METRICS_EXTRA_COLLECTORS | No | Optional additional metrics collectors. | |
| SUBSTACK_PUBLICATION_URL | No | Optional Substack publication URL. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| post_draft_from_markdownA | Create or update a Substack draft from Markdown. This is the body.', subtitle='My Post Subtitle', audience='everyone', write_comment_permissions='everyone', tags=['python', 'substack'], prepublish=True, publish=False, # set true when ready ) print(result) ``` |
| put_draftC | Update an existing draft by draft ID. |
| add_tagsB | Add tags to a specific draft/post. |
| prepublish_draftC | Invoke prepublish checks for a draft. |
| publish_draftA | Publish a draft to live post state. (Legacy compatibility interface). This tool remains for backward compatibility. It is recommended to use
|
| publish_draft_checkedB | A safer publishing path that requires confirmation and runs prepublish checks. |
| get_statusA | Get the authentication status and basic user information. |
| list_publicationsB | List all publications available to the authenticated user. |
| list_draftsC | List drafts for the current publication. |
| get_draftC | Get a specific draft by its ID. |
| schedule_draftC | Schedule a draft for release. |
| unschedule_draftC | Unschedule a previously scheduled draft. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 12 tools
Several tools overlap: post_draft_from_markdown bundles create/update plus prepublish/publish/tags, duplicating add_tags, prepublish_draft, and publish_draft, and put_draft also updates drafts, muddying create-vs-update boundaries. publish_draft and publish_draft_checked are near-duplicates, though the descriptions explicitly flag the legacy/safer distinction. Descriptions help but an agent must still reason about which of several paths to use.
Most tools follow a clean verb_noun pattern (add_tags, prepublish_draft, publish_draft, get_status, list_drafts, get_draft, schedule_draft, unschedule_draft). Minor deviations: put_draft uses 'put' instead of 'update', and post_draft_from_markdown is a longer, less uniform form. Overall consistent and readable.
Twelve tools is well-scoped for a publishing workflow and each maps to a recognizable operation. Slight redundancy from the legacy publish_draft alongside publish_draft_checked, but count is reasonable.
Draft lifecycle is mostly covered (create, get, list, update, publish, schedule/unschedule, add tags), but there is no delete_draft and no way to remove tags. Publication listing exists without a corresponding get/select-publication operation, leaving a few dead ends.