
Metaculus
- 12 installs
- 610 repo stars
- Updated June 26, 2026
- alsk1992/cloddsbot
metaculus is a Claude Code skill that provides read-only access to the Metaculus forecasting platform's questions, community predictions, and tournaments.
About
This skill integrates the Metaculus community forecasting platform into the clodds bot as a read-only data source. A developer uses it to search questions, view community probability predictions, and list tournaments and their questions. It provides forecast context alongside the bot's prediction-market trading and is explicitly non-trading.
- Search Metaculus questions and view community forecasts
- List tournaments and pull tournament questions
- Read-only: no trading or betting functionality
Metaculus by the numbers
- 12 all-time installs (skills.sh)
- Ranked #781 of 1,106 Finance & Trading skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
metaculus capabilities & compatibility
- Capabilities
- forecast lookup · market research
- Use cases
- research
- Runs
- Runs locally
- Pricing
- Free
What metaculus says it does
Integration with Metaculus, a community forecasting platform. View questions, predictions, and tournaments.
No trading or betting functionality
npx skills add https://github.com/alsk1992/cloddsbot --skill metaculusAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 12 |
|---|---|
| repo stars | ★ 610 |
| Last updated | June 26, 2026 |
| Repository | alsk1992/cloddsbot ↗ |
What it does
Search Metaculus questions and read community forecast probabilities and tournaments from within the bot.
Who is it for?
Pulling community forecast probabilities for research alongside prediction markets
Skip if: Placing trades or bets; it is read-only
When should I use this skill?
You want to look up a Metaculus question or tournament forecast
By the numbers
- 4 commands (search, question, tournaments, tournament)
Files
Metaculus
Integration with Metaculus, a community forecasting platform. View questions, predictions, and tournaments.
Quick Start
# Search questions
/mc search AI
# Get question details
/mc question 12345
# List tournaments
/mc tournaments
# Get tournament questions
/mc tournament 123Commands
| Command | Description |
|---|---|
/mc search [query] | Search questions |
/mc question <id> | Get question details |
/mc tournaments | List active tournaments |
/mc tournament <id> | Get tournament questions |
Examples:
/mc search pandemic # Search for pandemic questions
/mc question 3479 # Get question details
/mc tournament 1234 # Get tournament questionsFeatures
- Community Forecasts - Aggregate probability predictions
- Tournaments - Forecasting competitions
- Question Types - Binary, continuous, date ranges
- Historical Accuracy - Track prediction calibration
Notes
- Metaculus is a forecasting platform (not trading)
- Questions show community prediction probabilities
- No trading or betting functionality
- Volume represents number of predictions
Resources
/**
* Metaculus CLI Skill
*
* Commands:
* /mc search [query] - Search questions
* /mc question <id> - Get question details
* /mc tournaments - List active tournaments
* /mc tournament <id> - Get tournament questions
*/
import { createMetaculusFeed, MetaculusFeed } from '../../../feeds/metaculus/index';
import { logger } from '../../../utils/logger';
let feed: MetaculusFeed | null = null;
async function getFeed(): Promise<MetaculusFeed> {
if (feed) return feed;
try {
feed = await createMetaculusFeed();
await feed.connect();
return feed;
} catch (error) {
logger.error({ error }, 'Failed to initialize Metaculus feed');
throw error;
}
}
async function handleSearch(query: string): Promise<string> {
const f = await getFeed();
try {
const defaultQuery = !query;
const markets = await f.searchMarkets(query || 'AI');
if (markets.length === 0) {
return 'No questions found.';
}
let output = defaultQuery
? `**Metaculus Questions** (showing default results — use \`/mc search <query>\` to filter)\n\n`
: `**Metaculus Questions** (${markets.length} results)\n\n`;
for (const market of markets.slice(0, 15)) {
const probability = market.outcomes[0]?.price ?? 0.5;
output += `**${market.question}**\n`;
output += ` ID: \`${market.id}\`\n`;
output += ` Probability: ${(probability * 100).toFixed(0)}%\n`;
output += ` Predictions: ${market.volume24h.toLocaleString()}\n`;
if (market.endDate) {
output += ` Closes: ${market.endDate.toLocaleDateString()}\n`;
}
output += '\n';
}
return output;
} catch (error) {
return `Error searching questions: ${error instanceof Error ? error.message : String(error)}`;
}
}
async function handleQuestion(questionId: string): Promise<string> {
const f = await getFeed();
try {
const market = await f.getMarket(questionId);
if (!market) {
return `Question ${questionId} not found.`;
}
const probability = market.outcomes[0]?.price ?? 0.5;
let output = `**${market.question}**\n\n`;
output += `ID: \`${market.id}\`\n`;
output += `Community Prediction: **${(probability * 100).toFixed(1)}%**\n`;
output += `Predictions: ${market.volume24h.toLocaleString()}\n`;
if (market.endDate) {
output += `Closes: ${market.endDate.toLocaleString()}\n`;
}
if (market.resolved) {
output += `Resolution: ${market.resolutionValue === 1 ? 'Yes' : market.resolutionValue === 0 ? 'No' : market.resolutionValue}\n`;
}
output += `\nURL: ${market.url}\n`;
if (market.description) {
output += `\n**Description:**\n${market.description.slice(0, 500)}${market.description.length > 500 ? '...' : ''}`;
}
return output;
} catch (error) {
return `Error fetching question: ${error instanceof Error ? error.message : String(error)}`;
}
}
async function handleTournaments(): Promise<string> {
const f = await getFeed();
try {
const tournaments = await f.getTournaments();
if (tournaments.length === 0) {
return 'No tournaments found.';
}
let output = `**Metaculus Tournaments** (${tournaments.length})\n\n`;
for (const t of tournaments.slice(0, 20)) {
output += `**${t.name}**\n`;
output += ` ID: \`${t.id}\`\n`;
output += ` Questions: ${t.questionCount}\n\n`;
}
return output;
} catch (error) {
return `Error fetching tournaments: ${error instanceof Error ? error.message : String(error)}`;
}
}
async function handleTournament(tournamentId: string): Promise<string> {
const f = await getFeed();
try {
const id = parseInt(tournamentId, 10);
if (isNaN(id)) {
return 'Invalid tournament ID.';
}
const markets = await f.getTournamentQuestions(id, { maxResults: 20 });
if (markets.length === 0) {
return `No questions found in tournament ${tournamentId}.`;
}
let output = `**Tournament ${tournamentId} Questions** (${markets.length})\n\n`;
for (const market of markets) {
const probability = market.outcomes[0]?.price ?? 0.5;
output += `**${market.question}**\n`;
output += ` ID: \`${market.id}\` | Prob: ${(probability * 100).toFixed(0)}%\n\n`;
}
return output;
} catch (error) {
return `Error fetching tournament: ${error instanceof Error ? error.message : String(error)}`;
}
}
export async function execute(args: string): Promise<string> {
const parts = args.trim().split(/\s+/);
const command = parts[0]?.toLowerCase() || 'help';
const rest = parts.slice(1);
switch (command) {
case 'search':
case 'questions':
return handleSearch(rest.join(' '));
case 'question':
case 'q':
if (!rest[0]) return 'Usage: /mc question <id>';
return handleQuestion(rest[0]);
case 'tournaments':
case 'contests':
return handleTournaments();
case 'tournament':
case 'contest':
if (!rest[0]) return 'Usage: /mc tournament <id>';
return handleTournament(rest[0]);
case 'help':
default:
return `**Metaculus Forecasting Commands**
/mc search [query] - Search questions
/mc question <id> - Get question details
/mc tournaments - List tournaments
/mc tournament <id> - Tournament questions
**Examples:**
/mc search AI safety
/mc question 3479
/mc tournament 1234
Note: Metaculus is a forecasting platform (no trading).`;
}
}
export default {
name: 'metaculus',
description: 'Metaculus forecasting platform - search questions, view predictions, and browse tournaments',
commands: ['/metaculus', '/mc'],
handle: execute,
};
Related skills
FAQ
Can this place bets?
No, Metaculus is a forecasting platform and the skill has no trading or betting functionality.
What can I look up?
Questions, aggregate community predictions, and tournaments, by search or by id.