{"apiVersion":"v1","directorySlug":"vff-mcp-1780508f80","title":"VFF - The signal in the noise","description":"The signal in the noise. Daily intelligence on generative AI, model releases, agents, research, and the industry moves that matter for business.","pageUrl":"https://www.mcpbundles.com/skills/vff-mcp-1780508f80","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://vff.ai/api/mcp","hostedMcpUrl":null,"toolCount":24,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"ai.vff/vff-mcp-1780508f80","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"search_articles","description":"Search published articles by keyword. Omit query or pass an empty string to get the latest articles (same feed as /latest). Returns title, slug, summary, published date, and canonical URL.","inputSchema":{"type":"object","properties":{"limit":{"type":"number"},"query":{"type":"string"},"topic":{"type":"string"}}},"logicalName":"search_articles","displayName":"search_articles","title":"search_articles","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_article","description":"Fetch a single published article by slug. Returns all editorial fields including TL;DR bullets, key implications, why it matters, business implications, and full body.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"}}},"logicalName":"get_article","displayName":"get_article","title":"get_article","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_articles","description":"List the latest published articles in reverse-chronological order — the same feed as the public /latest page. Supports optional topic filtering and pagination via limit and offset.","inputSchema":{"type":"object","properties":{"limit":{"type":"number"},"topic":{"type":"string"},"offset":{"type":"number"}}},"logicalName":"list_articles","displayName":"list_articles","title":"list_articles","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_topics","description":"List all available topic categories with their slugs and RSS feed URLs.","inputSchema":{"type":"object","properties":{}},"logicalName":"list_topics","displayName":"list_topics","title":"list_topics","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_site_info","description":"Returns tenant identity and endpoint discovery metadata: siteName, description, siteUrl, endpoint URLs (mcp, openapi, llms, manifest, feed), plus aggregate counts of topics and active sources.","inputSchema":{"type":"object","properties":{}},"logicalName":"get_site_info","displayName":"get_site_info","title":"get_site_info","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_latest_articles","description":"Alias for list_articles. Returns the most recently published articles.","inputSchema":{"type":"object","properties":{"limit":{"type":"number"},"topic":{"type":"string"},"offset":{"type":"number"}}},"logicalName":"get_latest_articles","displayName":"get_latest_articles","title":"get_latest_articles","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_topic","description":"Fetch a single topic by slug. Returns topic metadata plus its most recent articles.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"},"limit":{"type":"number"}}},"logicalName":"get_topic","displayName":"get_topic","title":"get_topic","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_sources","description":"List active feed sources for this tenant. Returns name, url, feed_url, source_type, description, and categories.","inputSchema":{"type":"object","properties":{}},"logicalName":"get_sources","displayName":"get_sources","title":"get_sources","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_related_content","description":"Find articles related to a given article slug. Scores by shared categories, falls back to recent articles.","inputSchema":{"type":"object","required":["slug"],"properties":{"n":{"type":"number"},"slug":{"type":"string"}}},"logicalName":"get_related_content","displayName":"get_related_content","title":"get_related_content","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_citation","description":"Return a citation-ready block for an article including APA-formatted string, key quote, and publication metadata.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"}}},"logicalName":"get_citation","displayName":"get_citation","title":"get_citation","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_video","description":"Fetch a single published video by internal database ID or external provider ID (e.g. YouTube video ID). Returns embed URL, thumbnail, title, description, duration, topic tags, and channel name.","inputSchema":{"type":"object","properties":{"id":{"type":"string"},"provider_id":{"type":"string"}}},"logicalName":"get_video","displayName":"get_video","title":"get_video","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_voice_profiles","description":"List the active author voice profiles for this tenant. Returns each profile's id, display_name, and whether it is the workspace default. Pass the id to generate_summary or generate_editorial as voice_profile_id to apply a specific author voice.","inputSchema":{"type":"object","properties":{}},"logicalName":"list_voice_profiles","displayName":"list_voice_profiles","title":"list_voice_profiles","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"publish_social_post","description":"Publish a workspace's APPROVED social posts to all its connected platforms in one call (one-to-many). Call with confirm:false first to preview the count and platforms, then confirm:true to publish. High blast-radius — requires write:ops scope.","inputSchema":{"type":"object","required":["workspace_name"],"properties":{"confirm":{"type":"boolean"},"content_id":{"type":"string"},"workspace_name":{"type":"string"}}},"logicalName":"publish_social_post","displayName":"publish_social_post","title":"publish_social_post","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_article","description":"Create a new article. Returns the article id and slug. Requires API key.","inputSchema":{"type":"object","required":["title"],"properties":{"body":{"type":"string"},"slug":{"type":"string"},"author":{"type":"string"},"status":{"type":"string"},"summary":{"type":"string"},"source_url":{"type":"string"},"source_name":{"type":"string"},"content_type":{"type":"string"},"scheduled_at":{"type":"string"}}},"logicalName":"create_article","displayName":"create_article","title":"create_article","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_article","description":"Update fields on an existing article by slug. Only provided fields are changed. Requires API key.","inputSchema":{"type":"object","required":["slug"],"properties":{"body":{"type":"string"},"slug":{"type":"string"},"author":{"type":"string"},"summary":{"type":"string"},"seo_title":{"type":"string"},"source_url":{"type":"string"},"source_name":{"type":"string"},"content_type":{"type":"string"},"internal_notes":{"type":"string"},"seo_description":{"type":"string"}}},"logicalName":"update_article","displayName":"update_article","title":"update_article","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"publish_article","description":"Immediately publish an article by slug. Fires the content.published webhook. Requires API key.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"}}},"logicalName":"publish_article","displayName":"publish_article","title":"publish_article","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"schedule_article","description":"Schedule an article to publish at a future datetime. Fires the content.scheduled webhook. Requires API key.","inputSchema":{"type":"object","required":["slug","publish_at"],"properties":{"slug":{"type":"string"},"publish_at":{"type":"string"}}},"logicalName":"schedule_article","displayName":"schedule_article","title":"schedule_article","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"classify_article","description":"Assign topic categories to an article. Replaces all existing category assignments. Use list_topics to get available slugs. Requires API key.","inputSchema":{"type":"object","required":["slug","category_slugs"],"properties":{"slug":{"type":"string"},"category_slugs":{"type":"array","items":{"type":"string"}}}},"logicalName":"classify_article","displayName":"classify_article","title":"classify_article","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"generate_summary","description":"AI-generate editorial summary fields for an article (TL;DR bullets, why it matters, SEO title/description, key implications, what to watch) and save them to the article. Optionally supply voice_profile_id or workspace_id to apply a specific author voice. Requires API key.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"},"workspace_id":{"type":"string"},"voice_profile_id":{"type":"string"}}},"logicalName":"generate_summary","displayName":"generate_summary","title":"generate_summary","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"generate_editorial","description":"AI-generate deeper editorial analysis fields (business relevance, key implications, what to watch) and save them to the article. Complements generate_summary. Optionally supply voice_profile_id or workspace_id to apply a specific author voice. Requires API key.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"},"workspace_id":{"type":"string"},"voice_profile_id":{"type":"string"}}},"logicalName":"generate_editorial","displayName":"generate_editorial","title":"generate_editorial","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"post_to_linkedin","description":"Post content to LinkedIn using a connected social workspace. When confirm is false (default), returns a preview so the user can review before posting. When confirm is true, publishes immediately. Requires API key.","inputSchema":{"type":"object","required":["content"],"properties":{"confirm":{"type":"boolean"},"content":{"type":"string"},"article_url":{"type":"string"},"workspace_name":{"type":"string"}}},"logicalName":"post_to_linkedin","displayName":"post_to_linkedin","title":"post_to_linkedin","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"extract_key_claims","description":"AI-powered extraction of factual claims and their attributed sources from an article body. Returns an array of { claim, attribution, confidence } objects. Does not modify the article. Requires write:content scope.","inputSchema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"}}},"logicalName":"extract_key_claims","displayName":"extract_key_claims","title":"extract_key_claims","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"trigger_ingest","description":"Kick off feed ingest for all active sources, or a specific source by id. Fire-and-forget — returns immediately with the count of triggered sources. Requires write:ops scope.","inputSchema":{"type":"object","properties":{"source_id":{"type":"string"}}},"logicalName":"trigger_ingest","displayName":"trigger_ingest","title":"trigger_ingest","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"send_newsletter","description":"Trigger send for the next due scheduled newsletter edition (scheduled_at <= now, status = scheduled). Optionally target a specific edition by id, or use dry_run to preview without sending. Per-tenant rate limit: once per hour via MCP. Requires write:ops scope.","inputSchema":{"type":"object","properties":{"dry_run":{"type":"boolean"},"edition_id":{"type":"string"}}},"logicalName":"send_newsletter","displayName":"send_newsletter","title":"send_newsletter","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=VFF---The-signal-in-the-noise&config=eyJ1cmwiOiAiaHR0cHM6Ly92ZmYuYWkvYXBpL21jcCJ9"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22VFF---The-signal-in-the-noise%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fvff.ai%2Fapi%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22VFF---The-signal-in-the-noise%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fvff.ai%2Fapi%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=VFF+-+The+signal+in+the+noise&connectorUrl=https%3A%2F%2Fvff.ai%2Fapi%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"VFF---The-signal-in-the-noise\" --url \"https://vff.ai/api/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/vff-mcp-1780508f80","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/vff-mcp-1780508f80/tools/{tool}","mcpServerUrl":"https://vff.ai/api/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/vff-mcp-1780508f80?live=1"}