| 1 | { |
| 2 | "manifest_version": "0.3", |
| 3 | "name": "last30days-pp-mcp", |
| 4 | "display_name": "Last30Days", |
| 5 | "version": "3.6.0", |
| 6 | "description": "Research any topic across Reddit, X, YouTube, Hacker News, Polymarket, GitHub, and the web - last 30 days, scored by upvotes, likes, and real-money prediction-market odds.", |
| 7 | "author": { |
| 8 | "name": "Matt Van Horn", |
| 9 | "url": "https://github.com/mvanhorn/last30days-skill" |
| 10 | }, |
| 11 | "repository": { |
| 12 | "type": "git", |
| 13 | "url": "https://github.com/mvanhorn/last30days-skill" |
| 14 | }, |
| 15 | "license": "MIT", |
| 16 | "keywords": [ |
| 17 | "research", |
| 18 | "reddit", |
| 19 | "twitter", |
| 20 | "x", |
| 21 | "youtube", |
| 22 | "hacker-news", |
| 23 | "polymarket", |
| 24 | "github", |
| 25 | "search", |
| 26 | "synthesis" |
| 27 | ], |
| 28 | "server": { |
| 29 | "type": "binary", |
| 30 | "entry_point": "bin/last30days-pp-mcp", |
| 31 | "mcp_config": { |
| 32 | "command": "${__dirname}/bin/last30days-pp-mcp", |
| 33 | "args": [], |
| 34 | "env": { |
| 35 | "OPENAI_API_KEY": "${user_config.openai_api_key}", |
| 36 | "XAI_API_KEY": "${user_config.xai_api_key}", |
| 37 | "BRAVE_API_KEY": "${user_config.brave_api_key}", |
| 38 | "EXA_API_KEY": "${user_config.exa_api_key}", |
| 39 | "SERPER_API_KEY": "${user_config.serper_api_key}", |
| 40 | "GOOGLE_API_KEY": "${user_config.google_api_key}", |
| 41 | "GEMINI_API_KEY": "${user_config.gemini_api_key}", |
| 42 | "GOOGLE_GENAI_API_KEY": "${user_config.google_genai_api_key}", |
| 43 | "APIFY_API_TOKEN": "${user_config.apify_api_token}", |
| 44 | "BSKY_APP_PASSWORD": "${user_config.bsky_app_password}", |
| 45 | "PARALLEL_API_KEY": "${user_config.parallel_api_key}", |
| 46 | "SCRAPECREATORS_API_KEY": "${user_config.scrapecreators_api_key}", |
| 47 | "OPENROUTER_API_KEY": "${user_config.openrouter_api_key}" |
| 48 | } |
| 49 | } |
| 50 | }, |
| 51 | "user_config": { |
| 52 | "openai_api_key": { |
| 53 | "type": "string", |
| 54 | "title": "OPENAI_API_KEY", |
| 55 | "description": "OpenAI API key. Powers Reddit research via OpenAI's web_search tool. Get one at https://platform.openai.com/api-keys.", |
| 56 | "sensitive": true, |
| 57 | "required": false |
| 58 | }, |
| 59 | "xai_api_key": { |
| 60 | "type": "string", |
| 61 | "title": "XAI_API_KEY", |
| 62 | "description": "xAI API key. Powers X / Twitter research via xAI's x_search tool. Get one at https://console.x.ai/.", |
| 63 | "sensitive": true, |
| 64 | "required": false |
| 65 | }, |
| 66 | "brave_api_key": { |
| 67 | "type": "string", |
| 68 | "title": "BRAVE_API_KEY", |
| 69 | "description": "Brave Search API key. Used for grounded web search results. Get one at https://brave.com/search/api/.", |
| 70 | "sensitive": true, |
| 71 | "required": false |
| 72 | }, |
| 73 | "exa_api_key": { |
| 74 | "type": "string", |
| 75 | "title": "EXA_API_KEY", |
| 76 | "description": "Exa search API key. Alternative web search backend with semantic ranking. Get one at https://exa.ai/.", |
| 77 | "sensitive": true, |
| 78 | "required": false |
| 79 | }, |
| 80 | "serper_api_key": { |
| 81 | "type": "string", |
| 82 | "title": "SERPER_API_KEY", |
| 83 | "description": "Serper API key. Google search via API. Get one at https://serper.dev/.", |
| 84 | "sensitive": true, |
| 85 | "required": false |
| 86 | }, |
| 87 | "google_api_key": { |
| 88 | "type": "string", |
| 89 | "title": "GOOGLE_API_KEY", |
| 90 | "description": "Google API key for YouTube transcript fetching and other Google services. Get one at https://console.cloud.google.com/apis/credentials.", |
| 91 | "sensitive": true, |
| 92 | "required": false |
| 93 | }, |
| 94 | "gemini_api_key": { |
| 95 | "type": "string", |
| 96 | "title": "GEMINI_API_KEY", |
| 97 | "description": "Gemini API key. Used for synthesis fallback when other LLM providers are unavailable. Get one at https://aistudio.google.com/apikey.", |
| 98 | "sensitive": true, |
| 99 | "required": false |
| 100 | }, |
| 101 | "google_genai_api_key": { |
| 102 | "type": "string", |
| 103 | "title": "GOOGLE_GENAI_API_KEY", |
| 104 | "description": "Alternative Google generative-AI API key. Same source as GEMINI_API_KEY; set whichever name your tooling expects.", |
| 105 | "sensitive": true, |
| 106 | "required": false |
| 107 | }, |
| 108 | "apify_api_token": { |
| 109 | "type": "string", |
| 110 | "title": "APIFY_API_TOKEN", |
| 111 | "description": "Apify API token. Powers TikTok and Instagram Reels search via Apify actors. Get one at https://console.apify.com/account/integrations.", |
| 112 | "sensitive": true, |
| 113 | "required": false |
| 114 | }, |
| 115 | "bsky_app_password": { |
| 116 | "type": "string", |
| 117 | "title": "BSKY_APP_PASSWORD", |
| 118 | "description": "Bluesky app password (not your main password). Powers AT Protocol post search. Create at https://bsky.app/settings/app-passwords.", |
| 119 | "sensitive": true, |
| 120 | "required": false |
| 121 | }, |
| 122 | "parallel_api_key": { |
| 123 | "type": "string", |
| 124 | "title": "PARALLEL_API_KEY", |
| 125 | "description": "Parallel AI key. Powers parallel research runs across sources. Get one at https://parallel.ai/.", |
| 126 | "sensitive": true, |
| 127 | "required": false |
| 128 | }, |
| 129 | "scrapecreators_api_key": { |
| 130 | "type": "string", |
| 131 | "title": "SCRAPECREATORS_API_KEY", |
| 132 | "description": "ScrapeCreators API key. Powers creator-focused social search across TikTok, Instagram, and YouTube. Get one at https://scrapecreators.com/.", |
| 133 | "sensitive": true, |
| 134 | "required": false |
| 135 | }, |
| 136 | "openrouter_api_key": { |
| 137 | "type": "string", |
| 138 | "title": "OPENROUTER_API_KEY", |
| 139 | "description": "OpenRouter API key. Alternative LLM provider gateway for synthesis. Get one at https://openrouter.ai/keys.", |
| 140 | "sensitive": true, |
| 141 | "required": false |
| 142 | } |
| 143 | }, |
| 144 | "compatibility": { |
| 145 | "claude_desktop": ">=1.0.0", |
| 146 | "platforms": [ |
| 147 | "darwin", |
| 148 | "linux" |
| 149 | ] |
| 150 | } |
| 151 | } |
| 152 |