Skip to content

MCP Reference

FrameWorks exposes an MCP (Model Context Protocol) server for AI agent integration. Connect your AI tools to create streams, manage recordings, check billing, and query analytics.

https://bridge.frameworks.network/mcp

Discovery metadata: /.well-known/mcp.json

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
"mcpServers": {
"frameworks": {
"url": "https://bridge.frameworks.network/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_TOKEN"
}
}
}
}

Restart Claude Desktop after saving.

Terminal window
claude mcp add frameworks https://bridge.frameworks.network/mcp

Any MCP-compatible client can connect using the endpoint URL and authentication headers. See Wallet Auth for headless agent auth or use a bearer token.

Interactive JWT and wallet sessions use the signed-in user’s platform role. API tokens are narrower: each tool requires its exact published domain permission, such as streams:read, streams:write, billing:read, billing:write, analytics:read, or infrastructure:write. Account, support, developer, consultant, and wallet-management tools use the corresponding account:*, support:read, developer:*, consultant:use, security:*, and placement:read/placement:write scopes.

High-risk tools require API tokens to carry both their domain scope and mcp:high-risk. Grant this only to autonomous agents that are intentionally allowed to perform destructive, credential-changing, financially costly, or arbitrary-query operations. Tool-specific confirmation fields and normal downstream authorization checks still apply.

Public operations need no credential. If an API token is supplied, its scopes still apply so a tenant-enriched version of a public response cannot bypass the token’s least-privilege boundary.

The server filters tool and resource discovery to data callable by the current credential. Resource reads require their matching domain read scope and unknown resources fail closed. Tool annotations describe read-only, destructive, idempotent, and open-world behavior for clients, but the Gateway’s server-side policy is authoritative.

The historical coarse values read and write are not wildcards and new tokens reject them. Rotate tokens to exact scopes. In particular, retention tools now use billing:read or billing:write, and both set_preferred_cluster and update_tenant_settings use settings:write; tokens created with their former stream or infrastructure scopes must be rotated. Omitting permissions creates a read-only token with streams:read.

Input objects reject unknown fields and publish constrained values as machine-readable enums. Requests are capped at 256 KiB, stateful sessions expire after 30 minutes, and tool results or resource reads above 64 KiB return RESULT_TOO_LARGE instead of malformed, truncated, or unbounded content.

Read-only data sources for account, billing, streams, analytics, infrastructure, support, and API discovery.

URIDescription
account://statusAccount status, blockers, and capabilities
billing://balancePrepaid balance, drain rate, estimated hours left
billing://pricingCanonical meter catalog and effective tier rules
billing://transactionsRecent balance transactions
billing://invoicesRecent draft and permanent itemized invoices
billing://invoices/{invoice_id}Itemized invoice; finalized lines are immutable
billing://paymentsRecent invoice payments and outstanding balance
billing://payments/{payment_id}One tenant-owned invoice payment and confirmation state
billing://documentsRetained invoices, receipts, and credit-note metadata
billing://documents/{kind}/{document_id}Printable tenant-owned document with integrity hash
streams://listList all streams
streams://{id}Stream details (relay ID or stream_id)
streams://{id}/healthStream health metrics
vod://listList all VOD assets
vod://{artifact_hash}VOD asset details (relay ID or artifact hash)
analytics://usagePurser-rated current-period itemized usage
analytics://viewersViewer metrics (last 24h)
analytics://geographicGeographic viewer distribution
analytics://routingRouting efficiency and cross-cluster traffic
analytics://federationFederation operations summary
analytics://network-topologyCluster topology and peer connectivity
nodes://listInfrastructure nodes
nodes://{id}Node details
clusters://listSubscribed clusters
clusters://{id}Cluster details (capacity, pricing, status)
clusters://marketplaceAvailable clusters for subscription
support://conversationsSupport conversation list
support://conversations/{conversation_id}Support conversation details
knowledge://sourcesCurated documentation sources for video streaming
schema://catalogCurated GraphQL catalog (schema + templates)

Public resources (no auth required): account://status, billing://pricing, clusters://marketplace.

Always read this first. Returns:

{
"account_ready": true,
"rated_work_ready": true,
"next_actions": [],
"blockers": [],
"capabilities": {
"create_stream": true,
"create_clip": true,
"read_analytics": true
},
"billing": {
"model": "prepaid",
"balance_cents": 5000,
"reserved_balance_cents": 1200,
"available_balance_cents": 3800,
"details_complete": true,
"low_balance_warning": false,
"drain_rate_cents_per_hour": 12
},
"rate_limits": {
"requests_per_minute": 120
}
}

account_ready means authentication and control-plane onboarding are usable. rated_work_ready and blockers describe rated media/compute work; zero balance does not make the account broken. balance_cents is the settled balance, reserved_balance_cents is already committed to active usage, and available_balance_cents is what remains spendable. Billable tool preflights use the available balance.

billing://pricing returns every active canonical meter, including meters that have no rule on the current tier. configured: false means the tier has no rule; it does not claim that a marketplace or custom cluster can never price the meter. Configured rules retain their model, included quantity, physical unit, allowed dimensions, and complete dimension-selector configuration.

analytics://usage is a Purser-rated current-period view, not a dashboard rollup. Its line_items include zero-priced meters and preserve the unit, bounded dimensions, pricing source, and work-cluster attribution. Use billing://invoices for recent drafts and finalized invoices and billing://invoices/{invoice_id} for one itemized invoice. Draft lines remain a current preview; finalized lines are the immutable snapshot used by payment, email, and operator settlement.

Actions the agent can perform.

ToolDescriptionRequires
get_media_placement_policyRead saved/effective policy and rolloutAuth + placement:read
get_media_placement_optionsPage through authorized placement selectorsAuth + placement:read
preview_media_placementPreview saved or draft routing; not a reservationAuth + placement:read
review_media_placement_changeReview exact policy updates without applyingOwner/Admin + placement:write
apply_media_placement_changeApply a reviewed, idempotent policy changeOwner/Admin + placement:write; API tokens also need mcp:high-risk
get_media_placement_changeRecover a change with its original idempotency keyAuth + placement:read
get_cluster_media_consentRead cluster-owner media consentAuth + placement:read + cluster ownership
review_cluster_media_consent_changeReview owner consent without applyingOwner/Admin + placement:write + cluster ownership
apply_cluster_media_consent_changeApply reviewed, idempotent owner consentOwner/Admin + placement:write + cluster ownership; API tokens also need mcp:high-risk
get_cluster_media_consent_changeRecover an owner-consent changeAuth + placement:read + cluster ownership
request_wallet_challengeRequest a single-use EIP-191 login/link challengeNone
list_linked_walletsList wallets linked to the authenticated userAuth
link_walletLink a wallet using a fresh signed challengeAuth
unlink_walletUnlink a wallet while retaining a sign-in methodAuth
link_emailAdd email/password and send verificationAuth
activate_free_tierActivate Free after email verificationAuth
get_tenant_settingsRead tenant identity and routing settingsAuth
update_tenant_settingsUpdate tenant name, primary cluster, or modelOwner/Admin
update_billing_detailsSet billing addressAuth
get_payment_optionsGet tenant-bound x402 payment optionsAuth
submit_paymentSubmit an x402 top-up paymentAuth
topup_balanceRequest ETH or USDC deposit address (locked rate)Auth
check_topupCheck crypto payment statusAuth
pay_invoiceCreate or resume an invoice paymentAuth + Billing
start_postpaid_setupStart Stripe or Mollie hosted postpaid setupAuth + Billing
complete_mollie_postpaid_setupVerify mandate and activate Mollie postpaidAuth + Billing
create_streamCreate a push or pull streamAuth
update_streamUpdate stream settings or pull-source configAuth
delete_streamDelete a streamAuth + Confirm
list_stream_keysList push-stream ingest keysAuth
create_stream_keyCreate an additional push-stream ingest keyAuth + Confirm
delete_stream_keyDeactivate a push-stream ingest keyAuth + Confirm
refresh_stream_keyRotate a push stream’s primary keyAuth + Confirm
validate_stream_keyValidate an ingest keyAuth
list_push_targetsList masked multistream destinationsAuth
create_push_targetAdd a multistream destinationAuth
update_push_targetUpdate or enable a multistream destinationAuth
delete_push_targetDelete a multistream destinationAuth
create_clipCreate clip from streamAuth + Balance
delete_clipDelete a clipAuth
start_dvrStart DVR recordingAuth + Balance
stop_dvrStop DVR recordingAuth
delete_dvrDelete a DVR recording and stored mediaAuth + Confirm
get_retention_policyRead tenant media-retention defaults and boundsAuth
set_retention_policySet tenant media-retention defaultsOwner/Admin + Billing
set_stream_retention_overridesSet DVR/clip retention overrides for a streamOwner/Admin + Billing
update_asset_retentionOverride retention for DVR, clip, or VODOwner/Admin + Billing
reset_asset_retentionReset asset retention to the cascade defaultOwner/Admin + Billing + Confirm
create_vod_uploadStart a VOD uploadAuth + Balance
get_vod_upload_statusInspect uploaded and missing VOD partsAuth
complete_vod_uploadFinalize a VOD uploadAuth + Balance
abort_vod_uploadCancel an uploadAuth
delete_vod_assetDelete a VOD assetAuth + Confirm
resolve_playback_endpointGet viewer playback URLsNone
list_signing_keysList playback signing keysAuth
create_signing_keyCreate a one-shot ES256 private keyAuth + Confirm
revoke_signing_keyRevoke a playback signing keyAuth + Confirm
set_playback_policySet JWT or webhook playback policyAuth + Confirm
clear_playback_policyClear playback policyAuth + Confirm
test_playback_accessTest JWT/webhook playback policy behaviorAuth
diagnose_rebufferingAnalyze rebuffering eventsAuth
diagnose_buffer_healthAnalyze buffer health and dry eventsAuth
diagnose_packet_lossAnalyze packet loss (protocol-aware)Auth
diagnose_routingAnalyze CDN routing decisionsAuth
get_stream_health_summaryAggregated stream health metricsAuth
get_anomaly_reportDetect anomalies vs baselineAuth
list_support_conversationsList recent support conversationsAuth
search_support_historySearch support conversationsAuth
introspect_schemaExplore the GraphQL schemaAuth
generate_queryGenerate a GraphQL query from templatesAuth
execute_queryExecute a GraphQL queryAuth + Balance
ask_consultantFull Skipper pipeline with confidence taggingAuth + Balance
browse_marketplaceBrowse available infrastructure clustersNone
subscribe_to_clusterSubscribe to a clusterOwner/Admin + Infrastructure
unsubscribe_from_clusterRemove a cluster subscriptionOwner/Admin + Infrastructure + Confirm
create_cluster_inviteInvite a tenant to subscribe to an owned clusterOwner/Admin + Infrastructure
revoke_cluster_inviteRevoke an outstanding cluster inviteOwner/Admin + Infrastructure
accept_cluster_inviteRedeem a cluster inviteOwner/Admin + Infrastructure
request_cluster_subscriptionRequest access to a clusterOwner/Admin + Infrastructure
approve_subscription_requestApprove a pending cluster subscriptionOwner/Admin + Infrastructure
reject_subscription_requestReject a pending cluster subscriptionOwner/Admin + Infrastructure
set_preferred_clusterSet preferred cluster for DNS steeringOwner/Admin + Settings
update_cluster_marketplaceUpdate cluster visibility, approval, or pricingOwner/Admin + Infrastructure + Confirm
create_enrollment_tokenCreate an enrollment token for edge bootstrapOwner/Admin + Infrastructure
get_node_infoFetch node detailsOwner/Admin + Infrastructure
manage_nodeActivate/deactivate/drain/restart a nodeOwner/Admin + Infrastructure
set_node_modeSet node mode (normal/draining/maintenance)Owner/Admin + Infrastructure
get_node_healthNode health and metrics summaryOwner/Admin + Infrastructure
list_incidentsIncidents on clusters the tenant ownsOwner/Admin + Infrastructure
get_incidentOne incident with alerts and timelineOwner/Admin + Infrastructure
acknowledge_incidentAcknowledge a firing incidentOwner/Admin + Infrastructure
assign_incidentAssign an incident to yourself, or unassign itOwner/Admin + Infrastructure
resolve_incidentResolve an incident manuallyOwner/Admin + Infrastructure
add_incident_noteAdd a note to an incident timelineOwner/Admin + Infrastructure
create_edge_clusterCreate edge cluster (returns token and Foghorn)Owner/Admin + Infrastructure

Public tools (no auth required): request_wallet_challenge, resolve_playback_endpoint, browse_marketplace. Payment options and submission require an authenticated tenant; x402 is a top-up mechanism, never an authentication bypass.

QoE tool responses use a consistent status enum: healthy | warning | critical | no_data.

update_billing_details

  • address_line1 (required): Street address
  • city (required): City
  • postal_code (required): Postal/ZIP code
  • country (required): ISO 3166-1 alpha-2 code
  • email, company, vat_number, address_line2: Optional

update_tenant_settings

  • name: Tenant display name.
  • primary_cluster_id: Preferred primary cluster for ingest and routing decisions.
  • deployment_model: Deployment model, for example shared, dedicated, or self_hosted.

Agents can call request_wallet_challenge without authentication, sign the returned message verbatim, and reconnect once with the X-Wallet-* headers. That exchange auto-provisions a new prepaid tenant when needed and returns X-Access-Token; use the token for subsequent calls. Authenticated agents can use list_linked_wallets, link_wallet, unlink_wallet, and link_email at zero balance. After the email link is verified, activate_free_tier switches prepaid to Free without billing details or provider collection; retained prepaid funds stay as account credit. An account cannot unlink its final wallet until it has another wallet or a verified password sign-in method. x402 only tops up the resulting tenant; it is never a login credential.

link_email / activate_free_tier

  • link_email takes email and password, then sends the normal verification message.
  • Follow that message once; verification is required before activation.
  • activate_free_tier takes no fields and selects the active canonical Free tier.
  • Free produces an itemized monthly EUR 0 usage statement and needs neither a billing profile nor Stripe/Mollie.

topup_balance

  • amount_cents (required): Target credit amount in tenant currency cents (USD or EUR)
  • asset: USDC (default) or ETH. LPT is reserved but currently rejected (no Chainlink LPT/USD feed).

Response is a locked-rate quote: token_amount (send exactly this much), price_usd (locked at issue time via Chainlink for ETH; 1:1 for USDC), quote_source (chainlink or one_to_one), network (defaults to Arbitrum), and an expires_at 24h out. The balance credit at confirmation is received × locked_price, so you get exactly the quoted amount regardless of price drift inside the TTL.

check_topup returns status of pending | confirming | completed | expired, plus tx_hash, confirmations, and on completion credited_cents / credited_currency (USD or EUR per the account).

pay_invoice

  • invoice_id (required): Invoice id from billing://invoices.
  • method (required): card, crypto_usdc, or crypto_eth.
  • return_url: Optional web application URL for card-checkout return.

The tool charges only the invoice’s current outstanding balance. Repeating the same call resumes its pending checkout or crypto quote. A different method is rejected until the pending payment expires or fails. Read billing://payments to inspect recent attempts and confirmation state.

start_postpaid_setup

  • provider (required): stripe or mollie; it must appear in the account’s configured setup providers.
  • tier_id (required): An eligible paid tier.
  • Stripe: provide success_url, cancel_url, and optionally billing_period: monthly | yearly.
  • Mollie: provide return_url and optionally method: creditcard | ideal | bancontact.

The tool returns a durable setup identifier and hosted action_url. Opening or returning from that URL is not proof of activation; provider confirmation is authoritative. Stripe completes from its webhook. After a successful Mollie first payment, call complete_mollie_postpaid_setup with the same tier_id; it fetches and validates the tenant’s mandate before creating the subscription.

create_stream

  • name (required): Stream display name
  • description, record, public: Optional
  • ingest_mode: push (default) or pull
  • pull_source: { source_uri, enabled }, required for pull
  • source_location: Optional { mode: any | restricted, clusters: [{ cluster_id, node_ids }], avoid_node_ids }. Omitted means any; private (LAN) and multicast pull sources require restricted with clusters that allow private pull sources. Node IDs are accepted only for clusters the tenant owns. The result returns the stream’s source_location, with mode custom when its placement rules hold more than a location. update_stream takes the same field; omitting it keeps the current location. See Pull-input streams.

create_clip

  • stream_id (required): Stream to clip from
  • title (required): Clip title
  • description, start_sec, duration_sec: Optional

resolve_playback_endpoint

  • content_id (required): playback_id, stream_id, or Relay ID
  • viewer_ip: Optional geo-routing hint
  • Returns thumbnail preview URLs in thumbnail_assets when poster and sprite assets are available.

create_vod_upload

  • filename (required): Original filename
  • size_bytes (required): File size in bytes
  • content_type, title, description: Optional

complete_vod_upload

  • upload_id (required): Upload session ID
  • parts (required): Array of { part_number, etag }

abort_vod_upload

  • upload_id (required): Upload session ID

delete_vod_asset

  • artifact_hash (required): VOD relay ID or artifact hash

introspect_schema

  • focus (required): query, mutation, subscription, or a specific type name
  • depth: Recursion depth 1-4 (default 2)

generate_query

  • field_name or field_path (one required): Field name or dot-separated path (e.g., streamsConnection, analytics.usage.streaming.viewerHoursHourlyConnection)
  • operation_type: query, mutation, or subscription (default query)

execute_query

  • query (required): GraphQL query or mutation to execute
  • variables: Variables for the query

ask_consultant

  • question (required): Question for the AI video streaming consultant
  • mode: Set to docs for docs-site read-only mode. Omit for regular consultant mode; MCP ask_consultant still blocks mutation tools, so call dedicated MCP tools directly when you intend to change platform state.

Returns a structured response with answer, confidence (verified, sourced, best_guess, or unknown), sources, and tools_used. This runs the configured Skipper pipeline — knowledge retrieval, optional web search, optional query rewriting/HyDE, and multi-step reasoning.

Rated tools check prepaid balance before executing; read, configuration, cleanup, and payment-recovery tools do not. Exactly €100 may use a simplified crypto document. Payments over €100, and any VAT-number claim, require the full billing fields returned by the payment blocker. See Payments — Preflight Errors for details.

Guided workflows for common tasks.

PromptDescriptionArguments
onboardingWalk through account setupNone
create_live_streamGuide to create and start streamingstream_name (optional)
troubleshoot_streamDiagnose stream issuesstream_id (required)
optimize_costsAnalyze usage, suggest savingsNone
capabilitiesExplain platform featuresNone
video_consultantExpert streaming consultant personaNone
diagnose_quality_issueGuided QoE troubleshooting workflowstream_id (required), symptom (optional)
api_integration_assistantGuided API integration workflowgoal (optional)
agent_instructionsFull MCP usage guide for agentsNone
self_hostingSelf-hosted edge deployment guideNone

The MCP server includes Skipper, an expert-level video streaming consultant. Use the video_consultant prompt to activate this mode, which guides your AI through available tools and knowledge sources.

Use ask_consultant for authenticated knowledge lookups with confidence tagging, or the diagnostic tools below for stream-level troubleshooting.

Read knowledge://sources to get curated entry points for video streaming documentation:

{
"sources": [
{ "name": "FrameWorks Docs", "index": "https://logbook.frameworks.network/", "sitemap": "..." },
{ "name": "MistServer Docs", "index": "https://docs.mistserver.org/", "sitemap": "..." },
{ "name": "FFmpeg Wiki", "index": "https://trac.ffmpeg.org/wiki/TitleIndex" },
{ "name": "OBS Wiki", "index": "https://obsproject.com/wiki/" }
]
}

Your AI can navigate these sitemaps to find codec guides, protocol references, and troubleshooting steps.

Skipper’s full knowledge base also includes SRT (Haivision), HLS (RFC 8216), nginx-rtmp, and ecosystem sources (Livepeer, WebRTC, DASH). Use ask_consultant to query the full knowledge base with confidence tagging and source citations. See the Skipper operator guide for the complete source list and how to add custom sources.

ToolUse Case
diagnose_rebufferingViewers experiencing buffering/stuttering
diagnose_buffer_healthQuality fluctuations, dry buffer events
diagnose_packet_lossProtocol-aware packet loss analysis
diagnose_routingCDN path issues, geographic performance
get_stream_health_summaryOverall stream quality assessment
get_anomaly_reportDetect sudden changes from baseline

Each tool returns structured results with status, metrics, analysis, and recommendations:

{
"status": "warning",
"metrics": { "rebuffer_count": 47, "avg_rebuffer_duration_ms": 2340 },
"analysis": "Elevated rebuffering. 47 events in 1h indicates upstream issues.",
"recommendations": [
"Reduce encoder bitrate from 6.2 Mbps to 4.5 Mbps",
"Check upload connection stability"
]
}

Access past support conversations to find previous solutions:

  • support://conversations — List all conversations
  • support://conversations/{id} — Full conversation with messages
  • search_support_history(query) — Search by keyword
  1. User reports: “My stream keeps buffering”
  2. AI reads account://status and streams://{id}/health
  3. AI calls diagnose_rebuffering and diagnose_buffer_health
  4. AI searches search_support_history("buffering") for similar past issues
  5. AI calls ask_consultant("rebuffering troubleshooting") for relevant documentation
  6. AI provides root cause analysis and encoder recommendations