{"schemaVersion":"1.0","name":"TubeAnalytics MCP Server","version":"1.0.0","description":"YouTube analytics platform for creators, teams, and agencies that need authenticated channel data, competitor tracking, and AI-assisted growth decisions.","homepageUrl":"https://www.tubeanalytics.net","documentationUrl":"https://www.tubeanalytics.net/openapi.json","discovery":{"aiTxt":"https://www.tubeanalytics.net/ai.txt","openapiJson":"https://www.tubeanalytics.net/openapi.json","mcpJson":"https://www.tubeanalytics.net/mcp.json","agentka":"https://www.tubeanalytics.net/.well-known/agentka.json","transport":"https://www.tubeanalytics.net/api/mcp"},"capabilities":{"tools":{},"resources":{"subscribe":false}},"resources":[{"name":"product-contract","title":"Canonical product contract","description":"Plan names, channel limits, pricing tiers, and free-trial rules. The single source of truth for all plan-aware decisions.","mimeType":"application/json","uri":"https://www.tubeanalytics.net/openapi.json"},{"name":"ai-txt","title":"AI crawler guidance","description":"Crawler permissions, allowed user agents, and product discovery metadata.","mimeType":"text/plain","uri":"https://www.tubeanalytics.net/ai.txt"},{"name":"agentka-manifest","title":"Agent-to-Agent protocol manifest","description":"A2A/AgentKA protocol discovery with skills list and authentication instructions.","mimeType":"application/json","uri":"https://www.tubeanalytics.net/.well-known/agentka.json"},{"name":"mcp-transport","title":"Streamable HTTP MCP transport","description":"Streamable HTTP transport endpoint for the TubeAnalytics MCP server.","mimeType":"application/json","uri":"https://www.tubeanalytics.net/api/mcp"}],"tools":[{"name":"list_channels","title":"List connected YouTube channels","description":"Returns every YouTube channel connected to the authenticated account. Each channel includes its internal TubeAnalytics ID, YouTube ID, title, subscriber count, and total views. Use this first to discover which channels are available before calling get_channel_analytics, list_videos, or get_audience_insights.","inputSchema":{"type":"object","properties":{},"required":[],"description":"No parameters required — returns all connected channels."},"outputSchema":{"type":"object","properties":{"channels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"youtubeId":{"type":"string"},"title":{"type":"string"},"subscriberCount":{"type":"integer","nullable":true},"totalViews":{"type":"integer","nullable":true},"createdAt":{"type":"string"}},"required":["id","youtubeId","title","createdAt"]}},"total":{"type":"integer"}},"required":["channels","total"]},"annotations":{"authenticated":true,"author":"TubeAnalytics","version":"1.0.0","category":"channels","rateLimitTier":"light","readOnly":true}},{"name":"get_channel_analytics","title":"Get channel analytics for a time range","description":"Returns aggregate performance metrics for a specific channel: total views, likes, comments, engagement rate, and the top 10 most-recently-published videos in the range. Use this to answer questions like 'How did my channel perform in the last 30 days?' or 'What's my average engagement rate over the past 90 days?'","inputSchema":{"type":"object","properties":{"channel_id":{"type":"string","description":"The TubeAnalytics internal channel ID (e.g. 'clxxxxxxxxxxxxxxx') or the YouTube channel ID (e.g. 'UC-xxxxxxx'). Obtain this from the list_channels tool response.","examples":["clxxxxxxxxxxxxxxx","UC-xxxxxxxxxxxxxxxxxxxxxxxx"]},"range":{"type":"string","enum":["7d","28d","30d","90d","1y"],"default":"28d","description":"Time window for aggregate metrics. Default: 28d."}},"required":["channel_id"]},"outputSchema":{"type":"object","properties":{"channel":{"type":"object","properties":{"id":{"type":"string"},"youtubeId":{"type":"string"},"title":{"type":"string"},"subscriberCount":{"type":"integer"},"totalViews":{"type":"integer"}},"required":["id","youtubeId","title"]},"range":{"type":"string"},"analytics":{"type":"object","properties":{"totalVideos":{"type":"integer"},"videosPublishedInRange":{"type":"integer"},"totalViews":{"type":"integer"},"totalLikes":{"type":"integer"},"totalComments":{"type":"integer"},"averageViewsPerVideo":{"type":"integer"},"engagementRate":{"type":"number"}},"required":["totalVideos","videosPublishedInRange","totalViews","totalLikes","totalComments","averageViewsPerVideo","engagementRate"]},"topVideos":{"type":"array","items":{"type":"object","properties":{"youtubeId":{"type":"string"},"title":{"type":"string"},"publishedAt":{"type":"string"},"viewCount":{"type":"integer","nullable":true},"likeCount":{"type":"integer","nullable":true},"commentCount":{"type":"integer","nullable":true}}}}},"required":["channel","range","analytics","topVideos"]},"annotations":{"authenticated":true,"author":"TubeAnalytics","version":"1.0.0","category":"analytics","rateLimitTier":"medium","readOnly":true}},{"name":"list_videos","title":"List and paginate channel videos","description":"Returns a page of videos for a channel, sorted by any metric (views, likes, comments, publish date). Use this to answer 'What are my top 20 most-viewed videos?' or to find underperforming videos for content strategy. Pass sort=viewCount&order=desc for descending view rankings.","inputSchema":{"type":"object","properties":{"channel_id":{"type":"string","description":"The TubeAnalytics internal channel ID (e.g. 'clxxxxxxxxxxxxxxx') or the YouTube channel ID (e.g. 'UC-xxxxxxx'). Obtain this from the list_channels tool response.","examples":["clxxxxxxxxxxxxxxx","UC-xxxxxxxxxxxxxxxxxxxxxxxx"]},"page":{"type":"integer","default":1,"description":"Page number (1-indexed). Default: 1."},"limit":{"type":"integer","default":20,"description":"Items per page. Default: 20. Maximum: 100."},"sort":{"type":"string","enum":["publishedAt","viewCount","likeCount","commentCount"],"default":"publishedAt","description":"Field to sort by. Default: publishedAt."},"order":{"type":"string","enum":["asc","desc"],"default":"desc","description":"Sort order. Default: desc (newest first)."}},"required":["channel_id"]},"outputSchema":{"type":"object","properties":{"videos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"youtubeId":{"type":"string"},"title":{"type":"string"},"publishedAt":{"type":"string"},"viewCount":{"type":"integer","nullable":true},"likeCount":{"type":"integer","nullable":true},"commentCount":{"type":"integer","nullable":true},"duration":{"type":"string","nullable":true}},"required":["id","youtubeId","title","publishedAt"]}},"total":{"type":"integer"},"page":{"type":"integer"},"limit":{"type":"integer"},"totalPages":{"type":"integer"}},"required":["videos","total","page","limit","totalPages"]},"annotations":{"authenticated":true,"author":"TubeAnalytics","version":"1.0.0","category":"videos","rateLimitTier":"medium","readOnly":true}},{"name":"get_audience_insights","title":"Get audience demographics and segments","description":"Returns audience demographics (age, gender, geography), subscriber health metrics (gain/loss/churn), and audience segment data (returning viewer, casual viewer, subscriber). Use this to answer 'What countries watch my channel?' or 'Is my subscriber churn healthy?' Returns null for demographics sections that haven't collected enough data yet.","inputSchema":{"type":"object","properties":{"channel_id":{"type":"string","description":"The TubeAnalytics internal channel ID (e.g. 'clxxxxxxxxxxxxxxx') or the YouTube channel ID (e.g. 'UC-xxxxxxx'). Obtain this from the list_channels tool response.","examples":["clxxxxxxxxxxxxxxx","UC-xxxxxxxxxxxxxxxxxxxxxxxx"]}},"required":["channel_id"]},"outputSchema":{"type":"object","properties":{"channel":{"type":"object","properties":{"id":{"type":"string"},"youtubeId":{"type":"string"},"title":{"type":"string"}},"required":["id","youtubeId","title"]},"demographics":{"type":["object","null"],"properties":{"date":{"type":"string"},"age":{"type":"object","additionalProperties":{"type":"number"}},"gender":{"type":"object","properties":{"male":{"type":"number"},"female":{"type":"number"},"other":{"type":"number"}}},"topCountries":{"type":"array","items":{"type":"string"}},"devices":{"type":"object","additionalProperties":{"type":"number"}}}},"subscriberHealth":{"type":["object","null"],"properties":{"healthScore":{"type":"number"},"totalSubscribers":{"type":"integer"},"netChange":{"type":"integer"},"churnRate":{"type":"number"}}},"segments":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"size":{"type":"integer"},"pct":{"type":"number"},"topCountries":{"type":"array","items":{"type":"string"}},"trending":{"type":"string","enum":["growing","stable","declining"],"nullable":true}}}}},"required":["channel","demographics","subscriberHealth","segments"]},"annotations":{"authenticated":true,"author":"TubeAnalytics","version":"1.0.0","category":"audience","rateLimitTier":"medium","readOnly":true}},{"name":"list_competitors","title":"List tracked competitor channels","description":"Returns all competitor channels being tracked for the authenticated account. Competitors are added manually in the TubeAnalytics dashboard. Use this to answer 'Who are my tracked competitors?' or to feed competitor data into a battlecard workflow. Note: this returns metadata (subscriber counts, video counts) but not detailed analytics — analytics for competitor channels would require a separate competitor analysis plan.","inputSchema":{"type":"object","properties":{},"required":[],"description":"No parameters required — returns all tracked competitors."},"outputSchema":{"type":"object","properties":{"competitors":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"youtubeId":{"type":"string"},"title":{"type":"string"},"subscriberCount":{"type":"integer","nullable":true},"videoCount":{"type":"integer","nullable":true},"lastSyncedAt":{"type":"string"}},"required":["id","youtubeId","title","lastSyncedAt"]}},"total":{"type":"integer"}},"required":["competitors","total"]},"annotations":{"authenticated":true,"author":"TubeAnalytics","version":"1.0.0","category":"competitors","rateLimitTier":"light","readOnly":true}},{"name":"get_product_contract","title":"Read the canonical product contract","description":"Returns the plan names, channel limits, pricing (monthly and annual), and free-trial rules. All other tools operate within the constraints defined here. Use this first when answering pricing questions or checking whether a feature is available on a given plan.","inputSchema":{"type":"object","properties":{},"required":[],"description":"No parameters required."},"outputSchema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"trialDays":{"type":"integer"},"plans":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"channelLimit":{"type":"integer"},"monthlyPrice":{"type":"number"},"yearlyPrice":{"type":"number"},"yearlyTotal":{"type":"number"}}}}},"required":["name","description","trialDays","plans"]},"annotations":{"authenticated":true,"author":"TubeAnalytics","version":"1.0.0","category":"discovery","rateLimitTier":"free","readOnly":true}},{"name":"get_openapi_spec","title":"Read the OpenAPI specification","description":"Returns the full machine-readable OpenAPI 3.1 document covering all API endpoints, authentication requirements, request/response schemas, and error codes. Use this when building API integrations or when the MCP tools above don't cover a needed operation.","inputSchema":{"type":"object","properties":{},"required":[],"description":"No parameters required."},"outputSchema":{"type":"object","description":"OpenAPI 3.1 document — see https://spec.openapis.org/oas/v3.1.0","additionalProperties":true},"annotations":{"authenticated":true,"author":"TubeAnalytics","version":"1.0.0","category":"discovery","rateLimitTier":"free","readOnly":true}}]}