{"ok":true,"version":"agent-chatgpt-app.v1","generatedAt":"2026-05-30T05:21:29.166Z","surface":{"id":"chatgpt-app","artistId":"laurel","safeForAgent":true,"browserAutomationRequired":false,"submittedToChatGpt":false,"currentMode":"readiness-manifest","relatedIssues":[608,609,610,611,612,613,671,672,673,674,799,800,801,805,807,808,810,920,971,986,1028,1112,1113,1114,1135,1192,1198,1199,1260,1282,1291,1292,1681,1692,1715,1735,1739,1744,1750,1753,1756,1761,1765,1778]},"officialSources":[{"title":"OpenAI Apps SDK quickstart","href":"https://developers.openai.com/apps-sdk/quickstart","usedFor":"Confirms ChatGPT apps require an MCP server and can optionally include a web component UI."},{"title":"OpenAI Apps SDK MCP server guide","href":"https://developers.openai.com/apps-sdk/concepts/mcp-server","usedFor":"Confirms Apps SDK uses MCP tools, tool calls, and optional component resources over Streamable HTTP or SSE."},{"title":"OpenAI Apps SDK connector setup","href":"https://developers.openai.com/apps-sdk/deploy/connect-chatgpt","usedFor":"Confirms ChatGPT connector setup expects a public HTTPS MCP endpoint such as /mcp."},{"title":"OpenAI Apps SDK reference","href":"https://developers.openai.com/apps-sdk/reference","usedFor":"Confirms descriptor metadata, UI resource links, tool invocation copy, security schemes, and safety annotations."},{"title":"OpenAI Apps SDK ChatGPT UI guide","href":"https://developers.openai.com/apps-sdk/build/chatgpt-ui","usedFor":"Confirms component UI renders structured tool results in a ChatGPT iframe and should be bundled as a component template."},{"title":"OpenAI Apps SDK security and privacy guide","href":"https://developers.openai.com/apps-sdk/guides/security-privacy","usedFor":"Confirms Apps SDK widgets run with strict CSP and write actions need least privilege, server-side validation, and human confirmation."}],"currentFanfulState":{"publicOverview":"https://fanful.net/agents","publicMarkdownGuide":"https://fanful.net/agent-docs/fanful-agent-surface.md","sdkStarterGuide":"https://fanful.net/agent-docs/fanful-agent-sdk-starter.md","agentIngestionQaGuide":"https://fanful.net/agent-docs/fanful-agent-ingestion-qa.md","hostedRuntimeBoundary":{"status":"external-first","guide":"https://fanful.net/agent-docs/fanful-hosted-agent-runtime.md","reason":"Fanful does not run arbitrary hosted agent code yet; future hosted workers need redacted run records, approval, cancellation, retries, limits, idempotency, and audit links before implementation."},"discoveryFile":"https://fanful.net/llms.txt","mcpServer":{"file":"scripts/fanful-mcp-server.mjs","packageCommand":"npm run mcp:server","smokeCommand":"npm run mcp:smoke","httpSmokeCommand":"npm run mcp:smoke:http","transport":"stdio + stateless streamable-http","publicEndpoint":"https://fanful.net/mcp","chatgptConnectable":true,"reason":"Fanful now exposes MCP tools over public HTTPS at /mcp with Apps SDK descriptor metadata for public read-only tools. Private reads use scoped delegated grants; confirmed writes, widgets, and submission remain separate readiness blockers."},"connectorInstallability":{"status":"connectable-tool-only","endpoint":"https://fanful.net/mcp","reason":"ChatGPT developer mode can connect to the public MCP endpoint and inspect the read-only tools; the app is not submitted for public listing."},"descriptorMetadata":{"status":"ready-with-confirmation-widgets","tools":["fanful_agent_surface_list","fanful_agent_manifest_read","fanful_listener_community_messages_read","fanful_creator_analytics_read","fanful_creator_lesson_credit_ledger_read","fanful_live_readiness_read","fanful_domain_setup_read","fanful_listener_live_support_preview","fanful_listener_entitlements_read","fanful_listener_profile_preferences_read","fanful_listener_display_name_confirmation_render","fanful_listener_checkout_confirmation_render","fanful_creator_membership_tier_confirmation_render","fanful_creator_lesson_price_policy_confirmation_render","fanful_creator_lesson_availability_confirmation_render","fanful_creator_shop_product_confirmation_render","fanful_creator_entitlement_metadata_confirmation_render","fanful_creator_live_status_confirmation_render","fanful_member_idea_board_read","fanful_creator_idea_moderation_manage","fanful_agent_action_contracts_read"],"securitySchemesMirroredToMeta":true,"invocationCopyReady":true,"widgetResourceUri":"ui://fanful/widgets/creator-live-status-confirmation.html","outputTemplate":"ui://fanful/widgets/creator-live-status-confirmation.html","reason":"Simple manifest reads advertise Apps SDK descriptor metadata without claiming widget resources. The listener display-name, listener checkout, creator membership tier, creator lesson price/policy, creator lesson availability, creator shop product, creator entitlement metadata, and creator live status confirmation render tools advertise widget resources and output templates."},"widgetStatus":{"status":"confirmation-widgets-ready","resourceUri":"ui://fanful/widgets/creator-live-status-confirmation.html","renderTool":"fanful_creator_live_status_confirmation_render","resources":["ui://fanful/widgets/listener-display-name-confirmation.html","ui://fanful/widgets/listener-checkout-confirmation.html","ui://fanful/widgets/creator-membership-tier-confirmation.html","ui://fanful/widgets/creator-lesson-price-policy-confirmation.html","ui://fanful/widgets/creator-lesson-availability-confirmation.html","ui://fanful/widgets/creator-shop-product-confirmation.html","ui://fanful/widgets/creator-entitlement-metadata-confirmation.html","ui://fanful/widgets/creator-live-status-confirmation.html"],"renderTools":["fanful_listener_display_name_confirmation_render","fanful_listener_checkout_confirmation_render","fanful_creator_membership_tier_confirmation_render","fanful_creator_lesson_price_policy_confirmation_render","fanful_creator_lesson_availability_confirmation_render","fanful_creator_shop_product_confirmation_render","fanful_creator_entitlement_metadata_confirmation_render","fanful_creator_live_status_confirmation_render"],"widgetDomain":"https://fanful.net","reason":"Manifest reads do not need a widget. Current widgets are limited to rendering confirmation summary data before separate confirmed write tools execute."},"submissionStatus":{"status":"not-submitted","reason":"The first confirmation widget resources, scoped delegated-grant auth plumbing, and #1778 submission packaging evidence exist, but #799 still tracks broader confirmed-write coverage before public submission.","nextIssue":799},"agentAuthorization":{"id":"scoped-delegated-grants","status":"revocation-ready","designDoc":"docs/agent/agent-authorization-model.md","credentialTransport":"Opaque bearer credentials travel in HTTP Authorization headers or MCP client transport configuration, never as prompt-visible MCP tool input.","principalClasses":["guest","listener","creator_admin","owner","approved_automation"],"scopeFamilies":["public:read","listener:profile:read","listener:profile:write","listener:preferences:read","listener:preferences:write","listener:entitlements:read","listener:listen-along:read","listener:listen-along:write","listener:community:post","listener:community:react","listener:ideas:read","listener:ideas:write","creator:<artistId>:read","creator:<artistId>:analytics:read","creator:<artistId>:commerce:preview","creator:<artistId>:commerce:write","creator:<artistId>:media:read","creator:<artistId>:media:write","creator:<artistId>:live:read","creator:<artistId>:live:write","creator:<artistId>:community:moderate","creator:<artistId>:community:speak","creator:<artistId>:rooms:read","creator:<artistId>:rooms:write","agent:workflow-triggers:read","agent:workflow-triggers:subscribe","agent:sessions:read","agent:sync-jobs:read","platform:ops:read"],"currentCompatibility":"Environment-gated admin tokens remain a dev/operator fallback. Scoped grant storage, runtime principal resolution, first-party authorization-code exchange, and user-visible revocation management are in place for private ChatGPT/MCP clients.","nextIssues":[]},"actionContracts":{"endpoint":"https://fanful.net/api/agent/action-contracts","resourceUri":"fanful://agent/action-contracts/manifest","mcpTool":"fanful_agent_action_contracts_read","reason":"The #608 manifest is now the shared source for auth, confirmation, audit, idempotency, rate-limit, and redaction expectations before write-capable ChatGPT tools are exposed."},"workflowTriggers":{"endpoint":"https://fanful.net/api/agent/workflow-triggers","resourceUri":"fanful://agent/workflow-triggers/manifest","mcpTool":"fanful_agent_manifest_read","reason":"The #1112/#1523 surface defines signed webhook payloads, retry/idempotency headers, redaction rules, event families, and the subscription registry for agents that need to react to Fanful changes without polling. Delivery is not enabled yet."},"agentSessions":{"endpoint":"https://fanful.net/api/agent/sessions","resourceUri":"fanful://agent/sessions/manifest","mcpTool":"fanful_agent_manifest_read","reason":"The #1113 manifest defines external agent run/session records, redacted event replay, pending approvals, cancellation, and the migration path from stateless MCP calls to durable session history."},"syncJobs":{"endpoint":"https://fanful.net/api/agent/sync-jobs","resourceUri":"fanful://agent/sync-jobs/manifest","mcpTool":"fanful_sync_job_status_read","reason":"The #1114/#1224 surface defines cursor-based imported-data sync jobs and now exposes the first authenticated Stripe catalog app-reference drift worker with redacted durable run/checkpoint records. Hosted arbitrary provider workers and provider writes remain separate future work."},"domains":{"endpoint":"https://fanful.net/api/agent/domains","resourceUri":"fanful://agent/domains/manifest","mcpTool":"fanful_domain_setup_read","reason":"The #680/#729/#733/#1780 domain surface lets agents read Fanful subdomain, BYO-domain DNS, Registrar quote/checkout, and final-registration readiness while keeping payment and irreversible registration writes web/admin confirmed."},"artistAnalytics":{"endpoint":"https://fanful.net/api/agent/artist-analytics","resourceUri":"fanful://agent/artist-analytics/manifest","mcpTool":"fanful_creator_analytics_read","reason":"The #1192 manifest lets authorized creator agents read aggregate analytics while raw listener rows, identifiers, and referrer query strings stay out of model-visible output."},"creatorLessonCreditLedger":{"endpoint":"https://fanful.net/api/agent/creator-commerce","resourceUri":"fanful://agent/creator-commerce/manifest","mcpTool":"fanful_creator_lesson_credit_ledger_read","actionContract":"creator.commerce.lesson-credit-ledger-read","reason":"The #1795 surface lets authorized creator/admin agents read the redacted lesson credit ledger health contract while guest calls receive an explicit authorization blocker and no partial ledger data."},"ideaBoard":{"endpoint":"https://fanful.net/api/agent/idea-board","resourceUri":"fanful://agent/idea-board/manifest","mcpTool":"fanful_member_idea_board_read / fanful_member_idea_submit / fanful_member_idea_vote_toggle / fanful_creator_idea_moderation_manage","reason":"The #602/#1702/#1897 surface makes member idea-board reads, confirmed scoped-listener submit/vote writes, and confirmed admin/automation moderation writes executable for MCP/CLI clients. Creator review/settings mutations still wait for their own confirmed wrappers."},"liveReadiness":{"endpoint":"https://fanful.net/api/agent/live-readiness","resourceUri":"fanful://agent/live-readiness/manifest","mcpTool":"fanful_live_readiness_read","reason":"The #807 manifest gives fans a listener-safe answer for live-room, webinar-room, and Listen Along joinability while writes stay on first-party confirmed endpoints."},"creatorLiveStatusWrites":{"endpoint":"https://fanful.net/api/agent/live-controls","resourceUri":"fanful://agent/live-controls/manifest","mcpTools":["fanful_live_status_preview","fanful_creator_live_status_update"],"confirmationWidget":{"resourceUri":"ui://fanful/widgets/creator-live-status-confirmation.html","renderTool":"fanful_creator_live_status_confirmation_render"},"reason":"The #920 live status write tool lets agents confirm go-live, end, cancel, and reschedule-to-scheduled transitions through the shared live-controls envelope. #1761 adds a ChatGPT widget render path for that confirmation without changing the write contract."},"liveSupportPreview":{"endpoint":"https://fanful.net/api/agent/listener-experience","resourceUri":"fanful://agent/listener-experience/manifest","mcpTool":"fanful_listener_live_support_preview","reason":"The #971/#986 live-support readiness block lets agents answer whether live-room support is available, preview the generic support donation confirmation copy, and explain the support-only confirmed checkout-start path. Membership checkout uses the separate listener purchase-link preview and membership checkout tool; signed-CD shop checkout uses the shop checkout tool; lesson and paid-room targets remain blocked."},"listenerCheckoutWrites":{"endpoint":"https://fanful.net/api/agent/listener-experience","resourceUri":"fanful://agent/listener-experience/manifest","mcpTools":["fanful_listener_support_checkout_start","fanful_listener_membership_checkout_start","fanful_listener_shop_checkout_start"],"confirmationWidget":{"resourceUri":"ui://fanful/widgets/listener-checkout-confirmation.html","renderTool":"fanful_listener_checkout_confirmation_render"},"reason":"The #986/#1222/#1517 checkout-start tools let agents confirm support, membership, and signed-CD shop checkout starts through listener.checkout.start. #1765 adds a ChatGPT widget render path for that confirmation without changing the write contracts or exposing raw Stripe/session identifiers."},"listenerEntitlements":{"endpoint":"https://fanful.net/api/agent/listener-experience","resourceUri":"fanful://agent/listener-experience/manifest","mcpTool":"fanful_listener_entitlements_read","reason":"The #805 entitlement status lets agents answer what a signed-in or scoped fan can access, including membership tier, benefits, purchase summary, and gated experiences, without exposing payment or listener identifiers."},"listenerProfilePreferences":{"endpoint":"https://fanful.net/api/agent/listener-experience","resourceUri":"fanful://agent/listener-experience/manifest","mcpTool":"fanful_listener_profile_preferences_read","reason":"The #808 profile/preferences status lets agents answer what profile email state and notification preferences a signed-in or scoped fan has configured without exposing listener, Better Auth, device, or push-token identifiers."},"listenerDisplayNameUpdate":{"endpoint":"https://fanful.net/api/agent/listener-experience","resourceUri":"fanful://agent/listener-experience/manifest","mcpTool":"fanful_listener_display_name_update","confirmationWidget":{"resourceUri":"ui://fanful/widgets/listener-display-name-confirmation.html","renderTool":"fanful_listener_display_name_confirmation_render"},"reason":"The #1715 profile write lets agents update a signed-in or scoped fan's visible display name after a fresh profile read, exact confirmation, acknowledged risk, stale-state observed display name, idempotency, reason, audit correlation, and listener/client audit attribution. #1735 adds the first ChatGPT widget render path for the confirmation summary without changing the write contract."},"creatorMembershipTierWrites":{"endpoint":"https://fanful.net/api/agent/creator-commerce","resourceUri":"fanful://agent/creator-commerce/manifest","mcpTools":["fanful_creator_membership_tier_create","fanful_creator_membership_tier_update","fanful_creator_membership_tier_archive_state","fanful_creator_membership_stripe_price_select","fanful_creator_membership_stripe_price_create"],"confirmationWidget":{"resourceUri":"ui://fanful/widgets/creator-membership-tier-confirmation.html","renderTool":"fanful_creator_membership_tier_confirmation_render"},"reason":"The #1371/#1677 creator membership tools let agents prepare tier lifecycle and membership Stripe Price writes through the shared creator-commerce envelope. #1739 adds a ChatGPT widget render path for those confirmations without changing the write contracts."},"creatorLessonPricePolicyWrites":{"endpoint":"https://fanful.net/api/agent/creator-commerce","resourceUri":"fanful://agent/creator-commerce/manifest","mcpTools":["fanful_creator_service_price_policy_update","fanful_creator_lesson_policy_update"],"confirmationWidget":{"resourceUri":"ui://fanful/widgets/creator-lesson-price-policy-confirmation.html","renderTool":"fanful_creator_lesson_price_policy_confirmation_render"},"reason":"The #945/#1413 lesson write tools let agents confirm lesson price and policy settings changes through the shared creator-commerce envelope. #1744 adds a ChatGPT widget render path for those confirmations without changing the write contracts."},"creatorLessonAvailabilityWrites":{"endpoint":"https://fanful.net/api/agent/creator-commerce","resourceUri":"fanful://agent/creator-commerce/manifest","mcpTools":["fanful_creator_lesson_availability_update"],"confirmationWidget":{"resourceUri":"ui://fanful/widgets/creator-lesson-availability-confirmation.html","renderTool":"fanful_creator_lesson_availability_confirmation_render"},"reason":"The #1550 lesson availability write tool lets agents confirm future open/cancelled availability windows through the shared creator-commerce envelope. #1753 adds a ChatGPT widget render path for those confirmations without changing the write contract."},"creatorShopProductWrites":{"endpoint":"https://fanful.net/api/agent/creator-commerce","resourceUri":"fanful://agent/creator-commerce/manifest","mcpTools":["fanful_creator_shop_product_create","fanful_creator_shop_product_visibility_update","fanful_creator_shop_product_details_update","fanful_creator_shop_product_stripe_price_select","fanful_creator_shop_product_stripe_price_create"],"confirmationWidget":{"resourceUri":"ui://fanful/widgets/creator-shop-product-confirmation.html","renderTool":"fanful_creator_shop_product_confirmation_render"},"reason":"The #1548/#1681/#1684/#1692 shop product tools let agents prepare safe catalog, visibility, and one-time Stripe Price writes through the shared creator-commerce envelope. #1750 adds a ChatGPT widget render path for those confirmations without changing the write contracts."},"creatorEntitlementMetadataWrites":{"endpoint":"https://fanful.net/api/agent/creator-commerce","resourceUri":"fanful://agent/creator-commerce/manifest","mcpTools":["fanful_creator_entitlement_metadata_update"],"confirmationWidget":{"resourceUri":"ui://fanful/widgets/creator-entitlement-metadata-confirmation.html","renderTool":"fanful_creator_entitlement_metadata_confirmation_render"},"reason":"The #1371 entitlement metadata write tool lets agents confirm protected community-channel access-mode and tier-access metadata changes through the shared creator-commerce envelope. #1756 adds a ChatGPT widget render path for that confirmation without changing the write contract."},"currentManifest":"https://fanful.net/api/agent/chatgpt-app","resourceUri":"fanful://agent/chatgpt-app/manifest"},"requirements":[{"id":"mcp-server","status":"ready","summary":"A ChatGPT app needs an MCP server that exposes tools and resources.","fanfulState":"Fanful has a local stdio MCP server plus a public stateless Streamable HTTP endpoint at /mcp with the same read-only, preview, and confirmed-write tools.","nextStep":"Use the HTTP endpoint for network MCP clients, and use scoped delegated grants for private reads or writes."},{"id":"public-mcp-endpoint","status":"ready","summary":"ChatGPT connector setup needs a reachable HTTPS endpoint ending in /mcp.","fanfulState":"Fanful exposes stateless Streamable HTTP MCP at https://fanful.net/mcp.","nextStep":"Validate connector compatibility from ChatGPT developer mode, then use scoped delegated grants for private reads."},{"id":"tool-descriptor-metadata","status":"ready","summary":"ChatGPT reads tool names, schemas, security schemes, annotations, and optional UI metadata to choose tools safely.","fanfulState":"Read-only Fanful MCP tools now mirror `securitySchemes` in `_meta`, provide Apps SDK tool-invocation copy, omit widget templates for simple manifest reads, and expose widget-backed render tools for listener display-name, listener checkout, creator membership tier, creator lesson price/policy, creator lesson availability, creator shop product, creator entitlement metadata, and creator live status confirmations.","nextStep":"Keep widget metadata on render/confirmation tools rather than attaching widgets to every data or write tool; use scoped delegated grants before private reads."},{"id":"web-component-ui","status":"ready","summary":"A web component is optional and should be used only where ChatGPT-native UI improves the workflow.","fanfulState":"Fanful now has Apps SDK widget resources for listener display-name confirmation at ui://fanful/widgets/listener-display-name-confirmation.html, listener checkout confirmation at ui://fanful/widgets/listener-checkout-confirmation.html, creator membership tier confirmation at ui://fanful/widgets/creator-membership-tier-confirmation.html, creator lesson price/policy confirmation at ui://fanful/widgets/creator-lesson-price-policy-confirmation.html, creator lesson availability confirmation at ui://fanful/widgets/creator-lesson-availability-confirmation.html, creator shop product confirmation at ui://fanful/widgets/creator-shop-product-confirmation.html, creator entitlement metadata confirmation at ui://fanful/widgets/creator-entitlement-metadata-confirmation.html, and creator live status confirmation at ui://fanful/widgets/creator-live-status-confirmation.html. Manifest reads remain tool-only; richer account summaries are future widget candidates.","nextStep":"Validate the widget from ChatGPT developer mode, capture submission screenshots, and repeat the same render-tool pattern for UI-heavy confirmed workflows."},{"id":"auth-confirmation-audit","status":"partial","summary":"User-specific, creator-admin, public-write, destructive, and billing-impacting actions need scoped grants, confirmation, and durable audit records.","fanfulState":"Fanful now publishes the #608 action-contract manifest, stores scoped grants, resolves scoped principals in agent HTTP/MCP requests, exchanges first-party approval codes for bearer tokens, lets users revoke active grants, has support, membership, signed-CD shop checkout, and listener display-name confirmed-write routes, and exposes a first-party sync-job worker. Broader billing-impacting and public-write routes remain blockers.","nextStep":"Keep adding confirmed-write routes on the shared action envelope before exposing broader billing-impacting or public-write ChatGPT tools."}],"recommendedChatGptTools":[{"name":"fanful_agent_surface_list","status":"ready","sourceMcpTool":"fanful_agent_surface_list","sourceResource":"fanful://agent/surfaces","securitySchemes":["noauth"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Reading Fanful agent surfaces","invoked":"Fanful agent surfaces ready"}},"summary":"Lists current Fanful MCP surfaces and issue-family status without a network request.","gaps":["No widget is needed for this simple manifest-style read."]},{"name":"fanful_agent_manifest_read","status":"ready","sourceMcpTool":"fanful_agent_manifest_read","sourceResource":null,"securitySchemes":["noauth"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Reading Fanful manifest","invoked":"Fanful manifest ready"}},"summary":"Reads community-chat, embedded-room, live-controls, live-readiness, creator-commerce, artist-analytics, listener-experience, idea-board, ChatGPT-app, action-contract, workflow-trigger, agent-session, sync-job, or domain setup manifests.","gaps":["Use public reads in ChatGPT first; use scoped delegated grants before using private creator/listener reads.","Keep model-visible output redacted exactly like the HTTP manifests."]},{"name":"fanful_domain_setup_read","status":"ready","sourceMcpTool":"fanful_domain_setup_read","sourceResource":"fanful://agent/domains/manifest","securitySchemes":["noauth","scoped-agent-grant"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Reading Fanful domain setup","invoked":"Fanful domain setup ready"}},"summary":"Reads Fanful subdomain, BYO-domain DNS, Cloudflare Registrar quote/checkout, and guarded final-registration status without executing payment or registrar writes.","gaps":["Use scoped delegated grants before private artist domain status reads in ChatGPT.","Registrar checkout and final registration remain web/admin confirmed actions, not ChatGPT-app writes."]},{"name":"fanful_listener_community_messages_read","status":"ready","sourceMcpTool":"fanful_listener_community_messages_read","sourceResource":"fanful://agent/community-chat/manifest","securitySchemes":["noauth","scoped-agent-grant"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Reading Fanful community messages","invoked":"Fanful community messages ready"}},"summary":"Reads the latest visible messages from an accessible Fanful community channel such as #general or #intros, defaulting to 10 messages.","gaps":["Use scoped delegated grants before reading private membership-gated channels in ChatGPT.","Hidden, flagged, and moderation-only message bodies stay out of listener reads."]},{"name":"fanful_listener_community_message_post","status":"auth-needed","sourceMcpTool":"fanful_listener_community_message_post","sourceResource":"fanful://agent/community-chat/manifest","securitySchemes":["scoped-agent-grant"],"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Posting Fanful community message","invoked":"Fanful community message posted"}},"summary":"Posts one visible community message or reply through MCP after scoped/session listener auth, exact public-message confirmation, acknowledged risk, idempotency, and channel-access checks.","gaps":["ChatGPT needs first-party auth/confirmation UX before this public-write tool is app-submission ready.","Creator speech, moderation, and channel management use separate contracts."]},{"name":"fanful_creator_community_channel_create","status":"auth-needed","sourceMcpTool":"fanful_creator_community_channel_create","sourceResource":"fanful://agent/community-chat/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Creating Fanful community channel","invoked":"Fanful community channel created"}},"summary":"Creates one additional creator community channel, optionally membership-tier gated, through MCP after exact creator confirmation, observed channel ids, idempotency, and community-channel audit correlation.","gaps":["ChatGPT needs first-party creator auth/confirmation UX before this listener-surface write is app-submission ready.","The tool creates channels and access metadata only; tier creation and pricing use separate creator-commerce tools."]},{"name":"fanful_creator_community_channel_update","status":"auth-needed","sourceMcpTool":"fanful_creator_community_channel_update","sourceResource":"fanful://agent/community-chat/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Updating Fanful community channel","invoked":"Fanful community channel updated"}},"summary":"Updates a non-default creator community channel title, description, archive state, or access metadata through MCP after exact creator confirmation, stale-state updatedAt, idempotency, and audit correlation.","gaps":["ChatGPT needs first-party creator auth/confirmation UX before this listener-surface write is app-submission ready.","The required #general channel cannot be renamed, archived, or membership-gated."]},{"name":"fanful_creator_analytics_read","status":"ready","sourceMcpTool":"fanful_creator_analytics_read","sourceResource":"fanful://agent/artist-analytics/manifest","securitySchemes":["noauth","scoped-agent-grant"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Reading Fanful analytics","invoked":"Fanful analytics ready"}},"summary":"Reads Laurel aggregate analytics for authorized creator agents; guest callers receive 401 and listener-only callers receive 403.","gaps":["Use scoped delegated grants before private creator analytics reads in ChatGPT.","Keep exports, targeting, audience segmentation, and analytics writes out of this read-only tool."]},{"name":"fanful_creator_lesson_credit_ledger_read","status":"ready","sourceMcpTool":"fanful_creator_lesson_credit_ledger_read","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["noauth","scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Reading Fanful lesson credit ledger","invoked":"Fanful lesson credit ledger ready"}},"summary":"Reads the redacted lesson credit ledger health summary for authorized creator/admin agents; guest callers receive an authorization blocker without a ledger version or partial ledger data.","gaps":["Use scoped delegated grants before private creator ledger reads in ChatGPT.","Credit spending, refunds, subscription renewals, skip-week handling, booking cancellation, and tier-benefit writes remain unavailable."]},{"name":"fanful_sync_job_status_read","status":"ready","sourceMcpTool":"fanful_sync_job_status_read","sourceResource":"fanful://agent/sync-jobs/manifest","securitySchemes":["noauth","scoped-agent-grant"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Reading Fanful sync job status","invoked":"Fanful sync job status ready"}},"summary":"Reads the latest or addressed durable Stripe catalog app-reference sync run, checkpoint, stats, and redacted drift output.","gaps":["Use scoped delegated grants before private sync status reads in ChatGPT.","Keep raw provider ids, payment identifiers, database ids, and provider credentials out of model-visible output."]},{"name":"fanful_sync_job_run","status":"auth-needed","sourceMcpTool":"fanful_sync_job_run","sourceResource":"fanful://agent/sync-jobs/manifest","securitySchemes":["scoped-agent-grant"],"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":true,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Running Fanful sync job","invoked":"Fanful sync job completed"}},"summary":"Runs the first-party Stripe catalog app-reference drift worker and persists a redacted checkpoint/run record with idempotency.","gaps":["Requires scoped creator/admin or approved automation credentials at the server route.","This is not provider write permission and does not create Stripe objects, update entitlements, or run arbitrary hosted code."]},{"name":"fanful_live_readiness_read","status":"ready","sourceMcpTool":"fanful_live_readiness_read","sourceResource":"fanful://agent/live-readiness/manifest","securitySchemes":["noauth"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Checking Fanful live readiness","invoked":"Fanful live readiness ready"}},"summary":"Reads fan live-room, embedded-room/webinar, and Listen Along joinability, blockers, media readiness, and next actions.","gaps":["Add OAuth/session mapping before ChatGPT can evaluate private signed-in listener readiness.","Keep chat posts, media-token joins, and Listen Along mutations behind first-party confirmation paths."]},{"name":"fanful_listener_entitlements_read","status":"ready","sourceMcpTool":"fanful_listener_entitlements_read","sourceResource":"fanful://agent/listener-experience/manifest","securitySchemes":["noauth","scoped-agent-grant"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Reading Fanful entitlements","invoked":"Fanful entitlements ready"}},"summary":"Reads the fan's membership tier, entitlement flags, purchase summary, and gated-experience status when the caller is signed in or has a scoped listener:entitlements:read grant.","gaps":["Signed-out calls return sign-in-required instead of private account data.","Keep checkout starts, cancellations, refunds, and membership changes behind future confirmed write tools."]},{"name":"fanful_listener_live_support_preview","status":"ready","sourceMcpTool":"fanful_listener_live_support_preview","sourceResource":"fanful://agent/listener-experience/manifest","securitySchemes":["noauth","scoped-agent-grant"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Checking Fanful live support","invoked":"Fanful live support preview ready"}},"summary":"Reads live-room support donation readiness, generic support checkout preview, confirmation copy, first-party live-event attribution status, and the support-only checkout-start contract.","gaps":["This is preview-only and does not create Stripe Checkout Sessions or return checkout URLs.","Support-only live-room agent checkout starts are available behind listener.checkout.start confirmation; membership checkout starts use listener.purchaseLinkPreview plus the membership checkout tool. Signed-CD shop checkout starts use listener.purchaseLinkPreview plus the shop checkout tool. Lesson and paid-room starts remain blocked by #918 and target-specific catalog/policy work."]},{"name":"fanful_listener_support_checkout_start","status":"auth-needed","sourceMcpTool":"fanful_listener_support_checkout_start","sourceResource":"fanful://agent/listener-experience/manifest","securitySchemes":["scoped-agent-grant"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":true,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Starting Fanful support checkout","invoked":"Fanful support checkout started"}},"summary":"Starts support donation checkout after the listener has previewed the purchase terms and supplied the exact confirmed agent-write envelope.","gaps":["Requires a scoped listener grant with listener:checkout:start or an equivalent first-party listener session at the server route.","Use fanful_listener_checkout_confirmation_render before this write in ChatGPT UI so the listener sees the target, terms, exact confirmation, and write boundary.","Membership and shop checkout use their own confirmed MCP tools. Lesson and paid-room starts remain blocked by #918 and target-specific catalog/policy work."]},{"name":"fanful_listener_membership_checkout_start","status":"auth-needed","sourceMcpTool":"fanful_listener_membership_checkout_start","sourceResource":"fanful://agent/listener-experience/manifest","securitySchemes":["scoped-agent-grant"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":true,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Starting Fanful membership checkout","invoked":"Fanful membership checkout started"}},"summary":"Starts membership checkout after the listener has previewed tier terms and supplied the exact confirmed agent-write envelope.","gaps":["Requires a scoped listener grant with listener:checkout:start or an equivalent first-party listener session at the server route.","Use fanful_listener_checkout_confirmation_render before this write in ChatGPT UI so the listener sees the target, terms, exact confirmation, and write boundary.","Shop checkout uses its own confirmed MCP tool. Lesson and paid-room starts remain blocked by #918 and target-specific catalog/policy work."]},{"name":"fanful_listener_shop_checkout_start","status":"auth-needed","sourceMcpTool":"fanful_listener_shop_checkout_start","sourceResource":"fanful://agent/listener-experience/manifest","securitySchemes":["scoped-agent-grant"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":true,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Starting Fanful shop checkout","invoked":"Fanful shop checkout started"}},"summary":"Starts signed-cd shop checkout after the listener has previewed product terms and supplied the exact confirmed agent-write envelope.","gaps":["Requires a scoped listener grant with listener:checkout:start or an equivalent first-party listener session at the server route.","Use fanful_listener_checkout_confirmation_render before this write in ChatGPT UI so the listener sees the target, terms, exact confirmation, and write boundary.","Lesson and paid-room starts remain blocked by #918 and target-specific catalog/policy work."]},{"name":"fanful_listener_profile_preferences_read","status":"ready","sourceMcpTool":"fanful_listener_profile_preferences_read","sourceResource":"fanful://agent/listener-experience/manifest","securitySchemes":["noauth","scoped-agent-grant"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Reading Fanful profile preferences","invoked":"Fanful profile preferences ready"}},"summary":"Reads the fan's profile basics, email confirmation status, notification channels, category preferences, and community-chat notification routing when the caller is signed in or has scoped listener profile/preference read grants.","gaps":["Signed-out calls return sign-in-required instead of private profile or preference data.","Keep notification preference changes behind future confirmed write tools with client attribution and idempotency."]},{"name":"fanful_listener_display_name_confirmation_render","status":"ready","sourceMcpTool":"fanful_listener_display_name_confirmation_render","sourceResource":"ui://fanful/widgets/listener-display-name-confirmation.html","securitySchemes":["noauth"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":"ui://fanful/widgets/listener-display-name-confirmation.html","widgetAccessible":true,"invocationCopy":{"invoking":"Preparing Fanful display name confirmation","invoked":"Fanful display name confirmation ready"}},"summary":"Renders a ChatGPT Apps SDK confirmation summary for the requested listener display-name change without mutating Fanful.","gaps":["This render tool is UI-only and does not replace fanful_listener_display_name_update.","The follow-up write still requires scoped listener credentials, exact confirmation, stale-state, idempotency, reason, and audit correlation."]},{"name":"fanful_listener_checkout_confirmation_render","status":"ready","sourceMcpTool":"fanful_listener_checkout_confirmation_render","sourceResource":"ui://fanful/widgets/listener-checkout-confirmation.html","securitySchemes":["noauth"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":"ui://fanful/widgets/listener-checkout-confirmation.html","widgetAccessible":true,"invocationCopy":{"invoking":"Preparing Fanful checkout confirmation","invoked":"Fanful checkout confirmation ready"}},"summary":"Renders a ChatGPT Apps SDK confirmation summary for support donation, membership, or signed-CD shop checkout starts without mutating Fanful or creating a Stripe Checkout Session.","gaps":["This render tool is UI-only and does not replace the scoped fanful_listener_*_checkout_start write tools.","The follow-up write still requires scoped listener credentials, exact confirmation, idempotency, reason, audit correlation, and server-owned Stripe handling.","Lesson and paid-room starts remain blocked by #918 and target-specific catalog/policy work."]},{"name":"fanful_listener_display_name_update","status":"auth-needed","sourceMcpTool":"fanful_listener_display_name_update","sourceResource":"fanful://agent/listener-experience/manifest","securitySchemes":["scoped-agent-grant"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Updating Fanful display name","invoked":"Fanful display name updated"}},"summary":"Updates the signed-in fan's visible display name after a fresh profile read, exact confirmation text, acknowledged risk, idempotency, audit correlation, stale observed display name, and scoped listener:profile:write or first-party listener credentials.","gaps":["ChatGPT still needs first-party listener auth before this profile write is app-submission ready.","Use fanful_listener_display_name_confirmation_render for the ChatGPT widget confirmation summary before calling this write tool.","The MCP tool and server route already enforce the shared write envelope, stale-state guard, idempotency, and listener/client audit attribution.","Email identity, passwords, notification preference writes, and historical chat/comment display-name snapshots stay out of scope."]},{"name":"fanful_member_idea_board_read","status":"ready","sourceMcpTool":"fanful_member_idea_board_read","sourceResource":"fanful://agent/idea-board/manifest","securitySchemes":["noauth"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Reading Fanful member ideas","invoked":"Fanful member ideas ready"}},"summary":"Reads visible member ideas, vote counts, signed-in viewer state when available, and admin-redacted review fields when authorized.","gaps":["Use visible/public idea-board reads in ChatGPT first; use scoped delegated grants before using admin review fields.","Submit and vote writes are now available as scoped listener MCP tools; ChatGPT still needs first-party auth/confirmation UX before public app submission."]},{"name":"fanful_member_idea_submit","status":"auth-needed","sourceMcpTool":"fanful_member_idea_submit","sourceResource":"fanful://agent/idea-board/manifest","securitySchemes":["scoped-agent-grant"],"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Submitting Fanful idea","invoked":"Fanful idea submitted"}},"summary":"Submits one visible member idea after scoped listener auth, exact public-content confirmation, acknowledged risk, idempotency, and audit correlation.","gaps":["ChatGPT needs first-party auth and confirmation UI before exposing this public-content write in a submitted app.","Creator review/settings writes remain separate contract-only operations."]},{"name":"fanful_member_idea_vote_toggle","status":"auth-needed","sourceMcpTool":"fanful_member_idea_vote_toggle","sourceResource":"fanful://agent/idea-board/manifest","securitySchemes":["scoped-agent-grant"],"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Updating Fanful idea vote","invoked":"Fanful idea vote updated"}},"summary":"Toggles or sets a signed-in listener vote on one visible idea after exact vote confirmation, acknowledged risk, idempotency, and audit correlation.","gaps":["ChatGPT needs first-party auth and confirmation UI before exposing this prioritization write in a submitted app.","Hidden ideas, raw voter ids, and admin notes stay out of listener output."]},{"name":"fanful_creator_idea_moderation_manage","status":"auth-needed","sourceMcpTool":"fanful_creator_idea_moderation_manage","sourceResource":"fanful://agent/idea-board/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":false},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Moderating Fanful idea","invoked":"Fanful idea moderation saved"}},"summary":"Accepts duplicate suggestions, archives/restores one idea, or adds a private moderation note after admin/automation auth, exact moderation confirmation, idempotency, stale-state guards, and audit correlation.","gaps":["ChatGPT needs first-party admin auth and confirmation UI before exposing this moderation write in a submitted app.","Guest and listener output must keep report queues, private notes, hidden ideas, and reviewer identifiers redacted."]},{"name":"fanful_agent_action_contracts_read","status":"ready","sourceMcpTool":"fanful_agent_action_contracts_read","sourceResource":"fanful://agent/action-contracts/manifest","securitySchemes":["noauth"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Reading Fanful action contracts","invoked":"Fanful action contracts ready"}},"summary":"Reads auth, confirmation, audit, idempotency, rate-limit, and redaction requirements for future listener, fan, creator, and operator writes.","gaps":["Use this manifest to implement write tools; do not treat the manifest itself as write authorization."]},{"name":"fanful_creator_lesson_price_preview","status":"auth-needed","sourceMcpTool":"fanful_creator_lesson_price_preview","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Previewing lesson price","invoked":"Lesson price preview ready"}},"summary":"Previews a lesson/coaching price change with service price/policy impact without mutating Fanful, Stripe, checkout, or public pages.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Add ChatGPT descriptor metadata and an optional confirmation widget before app submission."]},{"name":"fanful_creator_lesson_price_policy_confirmation_render","status":"ready","sourceMcpTool":"fanful_creator_lesson_price_policy_confirmation_render","sourceResource":"ui://fanful/widgets/creator-lesson-price-policy-confirmation.html","securitySchemes":["noauth"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":"ui://fanful/widgets/creator-lesson-price-policy-confirmation.html","widgetAccessible":true,"invocationCopy":{"invoking":"Preparing Fanful lesson confirmation","invoked":"Fanful lesson confirmation ready"}},"summary":"Renders a ChatGPT Apps SDK confirmation summary for creator lesson price and lesson policy settings writes without mutating Fanful.","gaps":["This render tool is UI-only and does not replace the separate lesson write tools.","The follow-up write still requires scoped creator or env-gated admin credentials, exact confirmation, stale-state, idempotency, reason, and audit correlation."]},{"name":"fanful_creator_service_price_policy_update","status":"auth-needed","sourceMcpTool":"fanful_creator_service_price_policy_update","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Confirming lesson price","invoked":"Lesson price updated"}},"summary":"Executes a confirmed lesson/coaching price change through the shared write envelope with artist confirmation, idempotency, stale-state, and creator-commerce audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Use fanful_creator_lesson_price_policy_confirmation_render before submission so the exact price change and risk acknowledgement are visible before the write."]},{"name":"fanful_creator_lesson_policy_update","status":"auth-needed","sourceMcpTool":"fanful_creator_lesson_policy_update","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Confirming lesson policy","invoked":"Lesson policy updated"}},"summary":"Creates or updates one lesson policy settings row through the shared write envelope with artist confirmation, idempotency, stale-state, and creator-commerce audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Use fanful_creator_lesson_price_policy_confirmation_render before submission so the exact policy setting changes and risk acknowledgement are visible before the write."]},{"name":"fanful_creator_lesson_availability_update","status":"auth-needed","sourceMcpTool":"fanful_creator_lesson_availability_update","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Confirming lesson availability","invoked":"Lesson availability updated"}},"summary":"Executes a confirmed future open/cancelled lesson availability write through the shared envelope with artist confirmation, idempotency, stale-state, and creator-commerce audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Use fanful_creator_lesson_availability_confirmation_render before submission so the exact availability window and risk acknowledgement are visible before the write."]},{"name":"fanful_creator_lesson_availability_confirmation_render","status":"ready","sourceMcpTool":"fanful_creator_lesson_availability_confirmation_render","sourceResource":"ui://fanful/widgets/creator-lesson-availability-confirmation.html","securitySchemes":["noauth"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":"ui://fanful/widgets/creator-lesson-availability-confirmation.html","widgetAccessible":true,"invocationCopy":{"invoking":"Preparing Fanful lesson availability confirmation","invoked":"Fanful lesson availability confirmation ready"}},"summary":"Renders a ChatGPT Apps SDK confirmation summary for creator lesson availability writes without mutating Fanful.","gaps":["This render tool is UI-only and does not replace fanful_creator_lesson_availability_update.","The follow-up write still requires scoped creator or env-gated admin credentials, exact confirmation, stale-state, idempotency, reason, and audit correlation."]},{"name":"fanful_creator_lesson_stripe_price_select","status":"auth-needed","sourceMcpTool":"fanful_creator_lesson_stripe_price_select","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Confirming lesson Stripe Price","invoked":"Lesson Stripe Price selected"}},"summary":"Executes a confirmed lesson Stripe Price mapping selection or clear through the shared write envelope with artist confirmation, idempotency, stale-state, catalog checks, and creator-commerce audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Add a ChatGPT confirmation widget before submission so the exact Stripe Price mapping and risk acknowledgement are visible before the write."]},{"name":"fanful_creator_lesson_stripe_price_create","status":"auth-needed","sourceMcpTool":"fanful_creator_lesson_stripe_price_create","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Creating lesson Stripe Price","invoked":"Lesson Stripe Price created"}},"summary":"Creates and selects one replacement lesson Stripe Price through the server route with artist confirmation, server-side Stripe credentials, idempotency, stale-state, Product context, and creator-commerce audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Add a ChatGPT confirmation widget before submission so the exact replacement Price and risk acknowledgement are visible before the write."]},{"name":"fanful_creator_membership_tier_confirmation_render","status":"ready","sourceMcpTool":"fanful_creator_membership_tier_confirmation_render","sourceResource":"ui://fanful/widgets/creator-membership-tier-confirmation.html","securitySchemes":["noauth"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":"ui://fanful/widgets/creator-membership-tier-confirmation.html","widgetAccessible":true,"invocationCopy":{"invoking":"Preparing Fanful membership tier confirmation","invoked":"Fanful membership tier confirmation ready"}},"summary":"Renders a ChatGPT Apps SDK confirmation summary for creator membership tier create/update/archive/restore and membership Stripe Price changes without mutating Fanful.","gaps":["This render tool is UI-only and does not replace the separate membership tier write tools.","The follow-up write still requires scoped creator or env-gated admin credentials, exact confirmation, stale-state, idempotency, reason, and audit correlation."]},{"name":"fanful_creator_membership_stripe_price_select","status":"auth-needed","sourceMcpTool":"fanful_creator_membership_stripe_price_select","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Confirming membership Stripe Price","invoked":"Membership Stripe Price selected"}},"summary":"Executes a confirmed membership tier Stripe Price mapping selection or clear through the shared write envelope with artist confirmation, idempotency, stale-state, catalog checks, and creator-commerce audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Use fanful_creator_membership_tier_confirmation_render before submission so the exact membership Stripe Price mapping and risk acknowledgement are visible before the write."]},{"name":"fanful_creator_membership_stripe_price_create","status":"auth-needed","sourceMcpTool":"fanful_creator_membership_stripe_price_create","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Creating membership Stripe Price","invoked":"Membership Stripe Price created"}},"summary":"Creates and selects one replacement monthly membership Stripe Price through the server route with artist confirmation, server-side Stripe credentials, idempotency, stale-state, Product context, and creator-commerce audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Use fanful_creator_membership_tier_confirmation_render before submission so the exact monthly replacement Price and risk acknowledgement are visible before the write."]},{"name":"fanful_creator_membership_tier_create","status":"auth-needed","sourceMcpTool":"fanful_creator_membership_tier_create","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Creating membership tier","invoked":"Membership tier created"}},"summary":"Creates one inactive membership tier draft with profile copy, monthly amount, ordered benefits, observed tier ids, artist confirmation, idempotency, stale-catalog guard, and creator-commerce audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Use fanful_creator_membership_tier_confirmation_render before submission so the exact tier profile, benefits, monthly amount, and risk acknowledgement are visible before the write."]},{"name":"fanful_creator_membership_tier_update","status":"auth-needed","sourceMcpTool":"fanful_creator_membership_tier_update","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Updating membership tier","invoked":"Membership tier updated"}},"summary":"Updates one membership tier's visible profile and ordered benefits through the shared write envelope with artist confirmation, idempotency, stale-state guard, and creator-commerce audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Use fanful_creator_membership_tier_confirmation_render before submission so the exact tier profile/benefit changes and risk acknowledgement are visible before the write."]},{"name":"fanful_creator_membership_tier_archive_state","status":"auth-needed","sourceMcpTool":"fanful_creator_membership_tier_archive_state","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Changing membership tier archive state","invoked":"Membership tier archive state changed"}},"summary":"Archives or restores one membership tier for future joins through the shared write envelope with artist confirmation, idempotency, stale-state guard, preserved existing entitlements, and creator-commerce audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Use fanful_creator_membership_tier_confirmation_render before submission so the exact archive/restore state and risk acknowledgement are visible before the write."]},{"name":"fanful_creator_shop_product_confirmation_render","status":"ready","sourceMcpTool":"fanful_creator_shop_product_confirmation_render","sourceResource":"ui://fanful/widgets/creator-shop-product-confirmation.html","securitySchemes":["noauth"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":"ui://fanful/widgets/creator-shop-product-confirmation.html","widgetAccessible":true,"invocationCopy":{"invoking":"Preparing Fanful shop product confirmation","invoked":"Fanful shop product confirmation ready"}},"summary":"Renders a ChatGPT Apps SDK confirmation summary for creator shop product create, visibility, details, and Stripe Price changes without mutating Fanful.","gaps":["This render tool is UI-only and does not replace the separate shop product write tools.","The follow-up write still requires scoped creator or env-gated admin credentials, exact confirmation, stale-state/catalog guards, idempotency, reason, and audit correlation."]},{"name":"fanful_creator_shop_product_create","status":"auth-needed","sourceMcpTool":"fanful_creator_shop_product_create","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Creating shop product","invoked":"Shop product created"}},"summary":"Creates one shop product with safe catalog metadata through the shared write envelope with artist confirmation, idempotency, observed product ids, duplicate id/slug checks, and creator-commerce audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Use fanful_creator_shop_product_confirmation_render before submission so the exact new product metadata, visibility, price, and risk acknowledgement are visible before the write."]},{"name":"fanful_creator_shop_product_visibility_update","status":"auth-needed","sourceMcpTool":"fanful_creator_shop_product_visibility_update","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Updating shop product visibility","invoked":"Shop product visibility updated"}},"summary":"Updates one existing shop product's active and show-in-shop flags through the shared write envelope with artist confirmation, idempotency, stale-state guard, and creator-commerce audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Use fanful_creator_shop_product_confirmation_render before submission so the exact visibility change and risk acknowledgement are visible before the write."]},{"name":"fanful_creator_shop_product_details_update","status":"auth-needed","sourceMcpTool":"fanful_creator_shop_product_details_update","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Updating shop product","invoked":"Shop product updated"}},"summary":"Updates one existing shop product's safe catalog copy, inventory, fulfillment note, download display metadata, or sort order through the shared write envelope with artist confirmation, idempotency, stale-state guard, duplicate-slug checks, and creator-commerce audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Use fanful_creator_shop_product_confirmation_render before submission so the exact product detail changes and risk acknowledgement are visible before the write."]},{"name":"fanful_creator_shop_product_stripe_price_select","status":"auth-needed","sourceMcpTool":"fanful_creator_shop_product_stripe_price_select","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Selecting shop product Stripe Price","invoked":"Shop product Stripe Price selected"}},"summary":"Selects or clears one compatible existing Stripe Price for an existing shop product through the shared write envelope with artist confirmation, idempotency, stale-state, app-state reference validation, and creator-commerce audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Use fanful_creator_shop_product_confirmation_render before submission so the exact shop product Price mapping and risk acknowledgement are visible before the write."]},{"name":"fanful_creator_shop_product_stripe_price_create","status":"auth-needed","sourceMcpTool":"fanful_creator_shop_product_stripe_price_create","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Creating shop product Stripe Price","invoked":"Shop product Stripe Price created"}},"summary":"Creates and selects one replacement one-time Stripe Price for an existing shop product through the shared write envelope with artist confirmation, server-side Stripe credentials, idempotency, stale-state, Product context, and creator-commerce audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Use fanful_creator_shop_product_confirmation_render before submission so the exact one-time replacement Price and risk acknowledgement are visible before the write."]},{"name":"fanful_creator_entitlement_metadata_confirmation_render","status":"ready","sourceMcpTool":"fanful_creator_entitlement_metadata_confirmation_render","sourceResource":"ui://fanful/widgets/creator-entitlement-metadata-confirmation.html","securitySchemes":["noauth"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":"ui://fanful/widgets/creator-entitlement-metadata-confirmation.html","widgetAccessible":true,"invocationCopy":{"invoking":"Preparing Fanful channel access confirmation","invoked":"Fanful channel access confirmation ready"}},"summary":"Renders a ChatGPT Apps SDK confirmation summary for a protected community-channel access-mode/tier-access metadata update without mutating Fanful.","gaps":["This render tool is UI-only and does not replace fanful_creator_entitlement_metadata_update.","The follow-up write still requires scoped creator/admin credentials, exact confirmation, stale-state, idempotency, reason, and audit correlation."]},{"name":"fanful_creator_entitlement_metadata_update","status":"auth-needed","sourceMcpTool":"fanful_creator_entitlement_metadata_update","sourceResource":"fanful://agent/creator-commerce/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Confirming channel access","invoked":"Channel access updated"}},"summary":"Executes a confirmed non-default community channel tier-access metadata update through the shared write envelope with artist confirmation, idempotency, stale-state, and creator-commerce audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Use fanful_creator_entitlement_metadata_confirmation_render before submission so the exact protected-surface access change and risk acknowledgement are visible before the write."]},{"name":"fanful_live_schedule_preview","status":"auth-needed","sourceMcpTool":"fanful_live_schedule_preview","sourceResource":"fanful://agent/live-controls/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Previewing live schedule","invoked":"Live schedule preview ready"}},"summary":"Previews a live-room create, schedule edit, or reschedule payload with affected surfaces, blockers, redactions, optional follower notification copy, confirmation, idempotency, stale-state, and audit requirements without mutating Fanful.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Add ChatGPT descriptor metadata and a confirmation widget before app submission."]},{"name":"fanful_creator_live_schedule_create","status":"auth-needed","sourceMcpTool":"fanful_creator_live_schedule_create","sourceResource":"fanful://agent/live-controls/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Creating live schedule","invoked":"Live schedule created"}},"summary":"Executes confirmed new live-event creation through the shared write envelope with artist confirmation, idempotency, blocker checks, optional notification-center fan-out, and audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Add a ChatGPT confirmation widget before submission so the exact confirmation text and risk acknowledgement are visible before the write."]},{"name":"fanful_creator_live_schedule_update","status":"auth-needed","sourceMcpTool":"fanful_creator_live_schedule_update","sourceResource":"fanful://agent/live-controls/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Confirming live schedule","invoked":"Live schedule updated"}},"summary":"Executes a confirmed live-room schedule update for an existing event through the shared write envelope with artist confirmation, idempotency, stale-state, optional notification-center fan-out, and audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Add a ChatGPT confirmation widget before submission so the exact confirmation text and risk acknowledgement are visible before the write."]},{"name":"fanful_creator_embedded_room_roster_update","status":"auth-needed","sourceMcpTool":"fanful_creator_embedded_room_roster_update","sourceResource":"fanful://agent/embedded-rooms/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Updating room roster","invoked":"Room roster updated"}},"summary":"Executes a confirmed embedded-room roster, co-host, stage, remove, or restore change through the shared write envelope with idempotency, stale-state, and audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Add a ChatGPT confirmation widget before submission so roster/stage impact and exact confirmation are visible before the write."]},{"name":"fanful_live_status_preview","status":"auth-needed","sourceMcpTool":"fanful_live_status_preview","sourceResource":"fanful://agent/live-controls/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Previewing live status","invoked":"Live status preview ready"}},"summary":"Previews a live-room go-live, end, cancel, or scheduled-status transition with readiness, affected surfaces, confirmation, stale-state, idempotency, and audit requirements without mutating Fanful.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Add ChatGPT descriptor metadata and a confirmation widget before app submission."]},{"name":"fanful_creator_live_status_confirmation_render","status":"ready","sourceMcpTool":"fanful_creator_live_status_confirmation_render","sourceResource":"ui://fanful/widgets/creator-live-status-confirmation.html","securitySchemes":["noauth"],"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false},"chatgptMetadata":{"descriptorMetadataReady":true,"securitySchemesMirroredToMeta":true,"outputTemplate":"ui://fanful/widgets/creator-live-status-confirmation.html","widgetAccessible":true,"invocationCopy":{"invoking":"Preparing Fanful live status confirmation","invoked":"Fanful live status confirmation ready"}},"summary":"Renders a ChatGPT Apps SDK confirmation summary for a live event status transition without mutating Fanful.","gaps":["This render tool is UI-only and does not replace fanful_creator_live_status_update.","The follow-up write still requires scoped creator/admin credentials, exact confirmation, stale-state, idempotency, reason, and audit correlation."]},{"name":"fanful_creator_live_status_update","status":"auth-needed","sourceMcpTool":"fanful_creator_live_status_update","sourceResource":"fanful://agent/live-controls/manifest","securitySchemes":["scoped-agent-grant","environment-admin"],"annotations":{"readOnlyHint":false,"destructiveHint":true,"openWorldHint":true},"chatgptMetadata":{"descriptorMetadataReady":false,"securitySchemesMirroredToMeta":false,"outputTemplate":null,"widgetAccessible":false,"invocationCopy":{"invoking":"Confirming live status","invoked":"Live status updated"}},"summary":"Executes a confirmed live-room status transition through the shared write envelope with artist confirmation, idempotency, stale-state, and audit correlation.","gaps":["Add creator scoped delegated grants before ChatGPT can call this for a real artist admin.","Use fanful_creator_live_status_confirmation_render before submission so the exact live status transition and risk acknowledgement are visible before the write."]}],"firstWorkflowCandidates":[{"id":"creator.analytics.read","audience":"creator","status":"ready-through-mcp","summary":"Read aggregate source funnels, top content outcomes, listener cohorts, and recent signals without scraping the admin dashboard.","entrypoints":["fanful_creator_analytics_read","fanful_agent_manifest_read(surface=artist-analytics)","fanful://agent/artist-analytics/manifest","https://fanful.net/api/agent/artist-analytics","https://fanful.net/api/agent/action-contracts?audience=creator&domain=analytics"],"needsWidget":false,"completedIssue":1192},{"id":"creator.lesson-credit-ledger.read","audience":"creator","status":"ready-through-mcp","summary":"Read aggregate lesson credit ledger health, event-type counts, blocked write ids, and recent redacted event markers without scraping /admin.","entrypoints":["fanful_creator_lesson_credit_ledger_read","fanful_agent_manifest_read(surface=creator-commerce)","fanful://agent/creator-commerce/manifest","https://fanful.net/api/agent/creator-commerce","https://fanful.net/api/agent/action-contracts?audience=creator&domain=commerce"],"needsWidget":false,"completedIssue":1795},{"id":"creator.media-upload.handoff","audience":"creator","status":"ready-through-mcp","summary":"Preview and create confirmed media upload/provenance sessions with audit/idempotency attribution, then hand binary media transfer to a non-model client.","entrypoints":["fanful_agent_manifest_read(surface=media-upload-sessions)","fanful_agent_action_contracts_read(audience=creator, domain=media)","fanful://agent/media-upload-sessions/manifest","fanful://agent/action-contracts/manifest","https://fanful.net/api/agent/media-upload-sessions","https://fanful.net/api/agent/action-contracts?audience=creator&domain=media","https://fanful.net/api/admin/uploads"],"needsWidget":true,"completedIssue":1299},{"id":"creator.lesson-price.preview","audience":"creator","status":"ready-through-mcp","summary":"Preview a coaching price change and return price/policy impact, before/after copy, and the audit plan.","entrypoints":["fanful_creator_lesson_price_preview","fanful://agent/creator-commerce/manifest","https://fanful.net/api/agent/creator-commerce"],"needsWidget":false,"completedIssue":906},{"id":"creator.lesson-price.confirmed-update","audience":"creator","status":"ready-through-mcp","summary":"Render a ChatGPT confirmation review, then confirm a lesson price or policy settings change after a fresh read/preview, exact confirmation, idempotency, stale-state, and audit checks.","entrypoints":["fanful_creator_lesson_price_policy_confirmation_render","fanful_creator_service_price_policy_update","fanful_creator_lesson_policy_update","ui://fanful/widgets/creator-lesson-price-policy-confirmation.html","fanful://agent/creator-commerce/manifest","https://fanful.net/api/agent/creator-commerce"],"needsWidget":true,"completedIssue":1744},{"id":"creator.membership-tier.confirmed-write","audience":"creator","status":"ready-through-mcp","summary":"Render a ChatGPT confirmation review, then create/update/archive/restore a membership tier or change its membership Stripe Price through the existing confirmed creator-commerce write tools.","entrypoints":["fanful_creator_membership_tier_confirmation_render","fanful_creator_membership_tier_create","fanful_creator_membership_tier_update","fanful_creator_membership_tier_archive_state","fanful_creator_membership_stripe_price_select","fanful_creator_membership_stripe_price_create","ui://fanful/widgets/creator-membership-tier-confirmation.html","fanful://agent/creator-commerce/manifest","https://fanful.net/api/agent/creator-commerce"],"needsWidget":true,"completedIssue":1739},{"id":"creator.shop-product.confirmed-write","audience":"creator","status":"ready-through-mcp","summary":"Render a ChatGPT confirmation review, then create/update a shop product or change its one-time Stripe Price through the existing confirmed creator-commerce write tools.","entrypoints":["fanful_creator_shop_product_confirmation_render","fanful_creator_shop_product_create","fanful_creator_shop_product_visibility_update","fanful_creator_shop_product_details_update","fanful_creator_shop_product_stripe_price_select","fanful_creator_shop_product_stripe_price_create","ui://fanful/widgets/creator-shop-product-confirmation.html","fanful://agent/creator-commerce/manifest","https://fanful.net/api/agent/creator-commerce"],"needsWidget":true,"completedIssue":1750},{"id":"creator.lesson-availability.confirmed-update","audience":"creator","status":"ready-through-mcp","summary":"Render a ChatGPT confirmation review, then confirm a future open/cancelled lesson availability change after a fresh read, exact confirmation, idempotency, stale-state, and audit checks.","entrypoints":["fanful_creator_lesson_availability_confirmation_render","fanful_creator_lesson_availability_update","ui://fanful/widgets/creator-lesson-availability-confirmation.html","fanful://agent/creator-commerce/manifest","https://fanful.net/api/agent/creator-commerce"],"needsWidget":true,"completedIssue":1753},{"id":"creator.entitlement-metadata.confirmed-update","audience":"creator","status":"ready-through-mcp","summary":"Render a ChatGPT confirmation review, then confirm a protected community-channel access-mode or tier-access metadata update after a fresh read, exact confirmation, idempotency, stale-state, and audit checks.","entrypoints":["fanful_creator_entitlement_metadata_confirmation_render","fanful_creator_entitlement_metadata_update","ui://fanful/widgets/creator-entitlement-metadata-confirmation.html","fanful://agent/creator-commerce/manifest","https://fanful.net/api/agent/creator-commerce"],"needsWidget":true,"completedIssue":1756},{"id":"listener.state.read","audience":"listener","status":"ready-through-mcp","summary":"Read public fan state and signed-in listener summaries with raw ids and media URLs redacted.","entrypoints":["fanful_agent_manifest_read(surface=listener-experience)","fanful://agent/listener-experience/manifest","https://fanful.net/api/agent/listener-experience"],"needsWidget":false,"completedIssue":673},{"id":"fan.membership-entitlements.read","audience":"fan","status":"ready-through-mcp","summary":"Answer what membership tier, purchases, benefits, and gated experiences a fan can access.","entrypoints":["fanful_listener_entitlements_read","fanful_agent_manifest_read(surface=listener-experience)","fanful://agent/listener-experience/manifest","https://fanful.net/api/agent/listener-experience"],"needsWidget":false,"completedIssue":805},{"id":"fan.profile-preferences.read","audience":"fan","status":"ready-through-mcp","summary":"Answer what profile email state and notification preferences a fan has configured.","entrypoints":["fanful_listener_profile_preferences_read","fanful_agent_manifest_read(surface=listener-experience)","fanful://agent/listener-experience/manifest","https://fanful.net/api/agent/listener-experience"],"needsWidget":false,"completedIssue":808},{"id":"fan.profile.display-name.update","audience":"fan","status":"ready-through-mcp","summary":"Update a fan's visible display name after reading profile preferences, rendering the ChatGPT confirmation summary when useful, confirming the exact new name, and passing stale-state, idempotency, and audit checks.","entrypoints":["fanful_listener_display_name_confirmation_render","fanful_listener_display_name_update","listener.profile.display-name.update","fanful_listener_profile_preferences_read","ui://fanful/widgets/listener-display-name-confirmation.html","fanful://agent/listener-experience/manifest","https://fanful.net/api/agent/listener-experience"],"needsWidget":true,"completedIssue":1735},{"id":"fan.live-readiness.read","audience":"fan","status":"ready-through-mcp","summary":"Answer whether a fan can join a live room, webinar room, or Listen Along session and what to do next.","entrypoints":["fanful_live_readiness_read","fanful_agent_manifest_read(surface=live-readiness)","fanful://agent/live-readiness/manifest","https://fanful.net/api/agent/live-readiness"],"needsWidget":true,"completedIssue":807},{"id":"fan.live-support.preview","audience":"fan","status":"ready-through-mcp","summary":"Answer whether live-room support/donation is available, what support confirmation text is required, and how support-only agent checkout creation works after confirmation.","entrypoints":["fanful_listener_live_support_preview","fanful_agent_manifest_read(surface=listener-experience)","fanful://agent/listener-experience/manifest","https://fanful.net/api/agent/listener-experience"],"needsWidget":true,"completedIssue":971},{"id":"fan.idea-board.read","audience":"fan","status":"ready-through-mcp","summary":"Read the member idea board and, with scoped listener auth, submit or vote on visible ideas without scraping the web UI.","entrypoints":["fanful_member_idea_board_read","fanful_member_idea_submit","fanful_member_idea_vote_toggle","fanful_agent_manifest_read(surface=idea-board)","fanful://agent/idea-board/manifest","https://fanful.net/api/agent/idea-board"],"needsWidget":false,"completedIssue":1702},{"id":"creator.idea-board.moderation","audience":"creator","status":"ready-through-mcp","summary":"Moderate idea-board duplicate suggestions, archives/restores, and private notes with confirmed admin/automation writes instead of browser automation.","entrypoints":["fanful_creator_idea_moderation_manage","fanful_agent_manifest_read(surface=idea-board)","fanful://agent/idea-board/manifest","https://fanful.net/api/agent/idea-board"],"needsWidget":true,"completedIssue":1897},{"id":"live.schedule.confirmed-update","audience":"creator","status":"ready-through-mcp","summary":"Preview live-room creation, schedule edits, and reschedules, then confirm new event creates or existing-event schedule updates with redacted stream fields, idempotency, confirmation, and audit requirements.","entrypoints":["fanful_live_schedule_preview","fanful_creator_live_schedule_create","fanful_creator_live_schedule_update","fanful_agent_manifest_read(surface=live-controls)","fanful://agent/live-controls/manifest","https://fanful.net/api/agent/live-controls"],"needsWidget":false,"completedIssue":1012},{"id":"live.go-live.readiness","audience":"creator","status":"ready-through-mcp","summary":"Preview and then confirm a live status transition with readiness, listener visibility, chat state, stale-state, idempotency, and audit requirements.","entrypoints":["fanful_live_status_preview","fanful_creator_live_status_confirmation_render","fanful_creator_live_status_update","ui://fanful/widgets/creator-live-status-confirmation.html","fanful_agent_manifest_read(surface=live-controls)","fanful://agent/live-controls/manifest","https://fanful.net/api/agent/live-controls"],"needsWidget":true,"completedIssue":1761},{"id":"live.embedded-room-roster.confirmed-update","audience":"creator","status":"ready-through-mcp","summary":"Read one embedded-room roster, then confirm one attendee invite, co-host promotion, stage move, removal, or restore with stale-state, idempotency, confirmation, and audit requirements.","entrypoints":["fanful_agent_manifest_read(surface=embedded-rooms)","fanful_creator_embedded_room_roster_update","fanful://agent/embedded-rooms/manifest","https://fanful.net/api/agent/embedded-rooms"],"needsWidget":false,"completedIssue":1028},{"id":"fan.community-context.read","audience":"fan","status":"ready-through-mcp","summary":"Read public community-chat channels and listener-safe message windows.","entrypoints":["fanful_agent_manifest_read(surface=community-chat)","fanful_listener_community_messages_read","fanful_listener_community_message_post","fanful://agent/community-chat/manifest","https://fanful.net/api/agent/community-chat"],"needsWidget":false,"completedIssue":648},{"id":"agent.workflow-triggers.read","audience":"operator","status":"registry-ready","summary":"Read the signed webhook trigger catalog and manage redacted subscription records so external agents know which Fanful events can eventually wake them without polling. Outbound delivery is still disabled.","entrypoints":["fanful_agent_manifest_read(surface=workflow-triggers)","fanful://agent/workflow-triggers/manifest","https://fanful.net/api/agent/workflow-triggers"],"needsWidget":false,"completedIssue":1112},{"id":"agent.session-events.read","audience":"operator","status":"manifest-only","summary":"Read the external agent session/event contract so ChatGPT or other clients know how Fanful will represent multi-step runs, pending approvals, and event replay.","entrypoints":["fanful_agent_manifest_read(surface=agent-sessions)","fanful://agent/sessions/manifest","https://fanful.net/api/agent/sessions"],"needsWidget":false,"completedIssue":1113},{"id":"agent.sync-jobs.read","audience":"operator","status":"ready-through-mcp","summary":"Read and run Fanful's first durable sync job worker so ChatGPT or other clients can inspect imported catalog checkpoints, duplicate-safe resumes, and redacted drift reports.","entrypoints":["fanful_agent_manifest_read(surface=sync-jobs)","fanful_sync_job_status_read","fanful_sync_job_run","fanful://agent/sync-jobs/manifest","https://fanful.net/api/agent/sync-jobs"],"needsWidget":false,"completedIssue":1224},{"id":"creator.confirmed-commerce-write","audience":"creator","status":"blocked-until-write-contract","summary":"Edit unsupported billing/shop fields, grant credits, change cancellations/refunds, or mutate entitlement groups and paid-room policies that do not yet have confirmed write wrappers.","entrypoints":["fanful_creator_membership_tier_create handles inactive tier draft creation","fanful_creator_membership_stripe_price_create handles replacement monthly membership Stripe Price creation","fanful_creator_shop_product_create handles safe shop product creation","fanful_creator_shop_product_details_update handles safe existing-product copy, inventory, fulfillment note, download display metadata, and sort order edits","fanful_creator_entitlement_metadata_update handles only non-default community channel tier access metadata","future confirmed MCP write tools for remaining creator commerce","fanful_agent_action_contracts_read(audience=creator, domain=commerce)","https://fanful.net/api/agent/action-contracts?audience=creator&domain=commerce","https://fanful.net/api/agent/creator-commerce"],"needsWidget":true,"nextIssue":799},{"id":"fan.checkout-start","audience":"listener","status":"ready-through-mcp","summary":"Start support, membership, or shop checkout from an agent client after exact listener confirmation.","entrypoints":["fanful_listener_checkout_confirmation_render","ui://fanful/widgets/listener-checkout-confirmation.html","fanful_listener_support_checkout_start","fanful_listener_membership_checkout_start","fanful_listener_shop_checkout_start","listener.checkout.start","fanful_agent_action_contracts_read(audience=listener, domain=commerce)","https://fanful.net/api/agent/action-contracts?audience=listener&domain=commerce","https://fanful.net/api/agent/listener-experience"],"needsWidget":true,"completedIssue":1765}],"appSubmissionReadiness":{"status":"partial","reason":"Fanful has reusable MCP tools, public docs, a public /mcp transport, scoped grant storage, runtime principal resolution, authorization-code exchange, revocation management, confirmed support/membership/shop checkout writes, confirmed creator commerce slices, a first-party sync-job worker, confirmation widgets, and #1778 submission packaging evidence, but #799 still tracks broader confirmed-write coverage before public submission.","nextIssues":[799],"packaging":{"issue":1778,"metadataDraft":"docs/agent/chatgpt-app-submission-packaging.md","publicMcpEndpoint":"https://fanful.net/mcp","screenshotAssets":[{"flow":"Listener display-name confirmation","widgetResourceUri":"ui://fanful/widgets/listener-display-name-confirmation.html","url":"https://fanful.net/pr-screenshots/issue-1735-chatgpt-display-name-confirmation-widget.png"},{"flow":"Listener checkout confirmation","widgetResourceUri":"ui://fanful/widgets/listener-checkout-confirmation.html","url":"https://fanful.net/pr-screenshots/issue-1765-chatgpt-checkout-confirmation-widget.png"},{"flow":"Creator membership tier confirmation","widgetResourceUri":"ui://fanful/widgets/creator-membership-tier-confirmation.html","url":"https://fanful.net/pr-screenshots/issue-1739-chatgpt-membership-tier-confirmation-widget.png"},{"flow":"Creator lesson price and policy confirmation","widgetResourceUri":"ui://fanful/widgets/creator-lesson-price-policy-confirmation.html","url":"https://fanful.net/pr-screenshots/issue-1744-chatgpt-lesson-price-policy-confirmation-widget.png"},{"flow":"Creator lesson availability confirmation","widgetResourceUri":"ui://fanful/widgets/creator-lesson-availability-confirmation.html","url":"https://fanful.net/pr-screenshots/issue-1753-chatgpt-lesson-availability-confirmation-widget.png"},{"flow":"Creator shop product confirmation","widgetResourceUri":"ui://fanful/widgets/creator-shop-product-confirmation.html","url":"https://fanful.net/pr-screenshots/issue-1750-chatgpt-shop-product-confirmation-widget.png"},{"flow":"Creator entitlement metadata confirmation","widgetResourceUri":"ui://fanful/widgets/creator-entitlement-metadata-confirmation.html","url":"https://fanful.net/pr-screenshots/issue-1756-chatgpt-entitlement-metadata-confirmation-widget.png"},{"flow":"Creator live status confirmation","widgetResourceUri":"ui://fanful/widgets/creator-live-status-confirmation.html","url":"https://fanful.net/pr-screenshots/issue-1761-chatgpt-live-status-confirmation-widget.png"}],"manualCaptureBlocker":"Final ChatGPT developer-mode iframe screenshots still require a connected ChatGPT app submission workspace; current public assets are browser-rendered widget evidence."},"doNotSubmitUntil":["Every write-capable tool has explicit confirmation, audit attribution, and safe cancellation behavior.","Any ChatGPT widget has CSP metadata, a stable widget domain, responsive screenshots, and no hidden browser automation dependency.","Submission materials explain that private creator/listener reads and writes use scoped delegated grants resolved server-side, not environment-only local admin secrets."]},"policy":{"canonicalContract":"MCP remains the portable contract. ChatGPT-specific metadata and widgets should be optional layers over the same tools/resources used by Claude Code, Codex, CLI, and other MCP clients.","widgetPolicy":"Do not add a widget for simple manifest reads. Use widgets for confirmation, account summaries, live readiness, checkout review, and other UI-heavy flows.","writePolicy":"Do not expose public, destructive, billing-impacting, moderation, or creator-speech writes to ChatGPT until the manifest marks the operation ready and the server enforces auth, confirmation, and audit rules.","secretHandling":"Never pass scoped grant tokens, admin tokens, Stripe ids, raw listener ids, media URLs, invite tokens, or payment identifiers as prompt-visible tool input or model-visible output."}}