{
  "schemaVersion": "1.0",
  "item": {
    "slug": "mlb-daily-scores",
    "name": "MLB Daily Scores",
    "source": "tencent",
    "type": "skill",
    "category": "内容创作",
    "sourceUrl": "https://clawhub.ai/jeremydouglaslaw-ui/mlb-daily-scores",
    "canonicalUrl": "https://clawhub.ai/jeremydouglaslaw-ui/mlb-daily-scores",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/mlb-daily-scores",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=mlb-daily-scores",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      ".gitattributes",
      "fetch_mlb.py",
      "README.md",
      "setup.py",
      "setup.sh",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/mlb-daily-scores"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/mlb-daily-scores",
    "agentPageUrl": "https://openagent3.xyz/skills/mlb-daily-scores/agent",
    "manifestUrl": "https://openagent3.xyz/skills/mlb-daily-scores/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/mlb-daily-scores/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "MLB Daily Scores",
        "body": "Fetches yesterday's game recap and today's upcoming game preview for the user's configured favourite MLB team. Includes spring training, regular season, postseason (Wild Card, Division Series, Championship Series, World Series), and exhibition games."
      },
      {
        "title": "Data Source",
        "body": "Uses the free MLB Stats API (statsapi.mlb.com). No API key required."
      },
      {
        "title": "1. Install dependencies",
        "body": "Run the setup script to install the Python packages:\n\n# macOS/Linux\nbash {baseDir}/setup.sh\n\n# Any platform (including Windows)\npython {baseDir}/setup.py\n\nOr install manually:\n\npip install --user MLB-StatsAPI requests"
      },
      {
        "title": "2. Configure your team",
        "body": "Add this to ~/.openclaw/openclaw.json under skills.entries:\n\n{\n  skills: {\n    entries: {\n      \"mlb-daily-scores\": {\n        enabled: true,\n        config: {\n          team: \"Toronto Blue Jays\", // Your favourite team (full name)\n          timezone: \"America/Toronto\", // Your local timezone (IANA format)\n        },\n      },\n    },\n  },\n}\n\nValid team names — use the full official name:\nArizona Diamondbacks, Atlanta Braves, Baltimore Orioles, Boston Red Sox, Chicago Cubs, Chicago White Sox, Cincinnati Reds, Cleveland Guardians, Colorado Rockies, Detroit Tigers, Houston Astros, Kansas City Royals, Los Angeles Angels, Los Angeles Dodgers, Miami Marlins, Milwaukee Brewers, Minnesota Twins, New York Mets, New York Yankees, Oakland Athletics, Philadelphia Phillies, Pittsburgh Pirates, San Diego Padres, San Francisco Giants, Seattle Mariners, St. Louis Cardinals, Tampa Bay Rays, Texas Rangers, Toronto Blue Jays, Washington Nationals."
      },
      {
        "title": "3. Set up the daily cron job",
        "body": "Ask me to set it up, or run manually:\n\nopenclaw cron add \\\n  --name \"MLB Daily Scores\" \\\n  --cron \"0 6 * * *\" \\\n  --tz \"America/Toronto\" \\\n  --session isolated \\\n  --message \"Run the mlb-daily-scores skill for my configured team. Use the fetch_mlb.py script, format the results nicely, and include yesterday's recap, today's preview, and any injuries.\" \\\n  --announce \\\n  --channel discord \\\n  --to \"channel:YOUR_CHANNEL_ID\"\n\nAdjust the parameters:\n\n--cron \"0 6 * * *\" — time to run (6:00 AM); change to your preferred time\n--tz — your timezone\n--channel — your preferred channel (discord, telegram, whatsapp, slack, etc.)\n--to — channel-specific target (channel ID, phone number, chat ID, etc.)"
      },
      {
        "title": "Automatic (cron)",
        "body": "Once the cron job is set up, the skill runs daily at your configured time and delivers the report to your channel."
      },
      {
        "title": "On demand (slash command)",
        "body": "Send /mlb-daily-scores in any chat to get an immediate update."
      },
      {
        "title": "Manual invocation",
        "body": "Ask me: \"What happened in the Blue Jays game yesterday?\" or \"Give me today's MLB update\""
      },
      {
        "title": "Instructions for the agent",
        "body": "{baseDir} in these instructions refers to the directory containing this SKILL.md file. Determine this path from the location of this file (e.g., if this file is at /home/openclaw/.openclaw/workspace/skills/mlb-daily-scores/skills/mlb-daily-scores/SKILL.md, then {baseDir} is /home/openclaw/.openclaw/workspace/skills/mlb-daily-scores/skills/mlb-daily-scores).\n\nWhen this skill is invoked (via cron, slash command, or user request):\n\nDetermine the base directory — find the directory where this SKILL.md and fetch_mlb.py are located. Call this BASEDIR.\n\n\nRead the user's config from skills.entries.mlb-daily-scores.config:\n\nteam: the MLB team name (required)\ntimezone: IANA timezone string (optional, defaults to system timezone)\n\n\n\nRun the fetch script using this EXACT command pattern (replacing BASEDIR with the actual path):\nBASEDIR/.venv/bin/python3 BASEDIR/fetch_mlb.py --config\n\nIMPORTANT: You MUST use the venv Python at BASEDIR/.venv/bin/python3. Do NOT use python, python3, or any other Python interpreter — the required packages are only installed inside the .venv virtual environment. Using any other Python will fail with import errors.\nThe --config flag tells the script to read team/timezone directly from ~/.openclaw/openclaw.json. No user values should be interpolated into the command string. This outputs JSON to stdout.\n\n\nParse the JSON output and check has_data:\n\nIf has_data is false and there's no error: it's off-season or a day off. Reply with HEARTBEAT_OK (this suppresses the message in cron/heartbeat mode).\nIf has_data is false and there's an error field: report the error to the user.\nIf has_data is true: format the report as described below.\n\n\n\nFormat the report using this structure (include game_type from the JSON when it is not Regular Season):\n\n⚾ MLB Daily Report — [Team Name]\n📅 [Today's Date]\n\n━━━━━━━━━━━━━━━━━━━━━━━\n📊 YESTERDAY'S RECAP [game_type, e.g. \"(Spring Training)\" — omit if Regular Season]\n━━━━━━━━━━━━━━━━━━━━━━━\n\n[Score Line, e.g.: Blue Jays 5, Yankees 3]\n\n  W: [Winning Pitcher]\n  L: [Losing Pitcher]\n  S: [Save Pitcher, if any]\n\nLINE SCORE:\n[Linescore text from the API]\n\n━━━━━━━━━━━━━━━━━━━━━━━\n🔮 TODAY'S PREVIEW [game_type, e.g. \"(Spring Training)\" — omit if Regular Season]\n━━━━━━━━━━━━━━━━━━━━━━━\n\n[Opponent] @ [Home Team]\n🕐 [Game Time in local timezone]\n🏟️ [Venue]\n\nStarting Pitchers:\n  [Away Team]: [Pitcher Name] ([W-L], [ERA] ERA)\n  [Home Team]: [Pitcher Name] ([W-L], [ERA] ERA)\n\n━━━━━━━━━━━━━━━━━━━━━━━\n🏥 INJURY REPORT\n━━━━━━━━━━━━━━━━━━━━━━━\n\n[For each injury]:\n• [Player Name] ([Position]) — [Injury Description] [Status]\n\n[If no injuries]: ✅ No players currently on the injury list.\n\nOmit sections that have no data:\n\nNo yesterday game → skip the recap section, note \"No game yesterday\"\nNo today game → skip the preview section, note \"No game scheduled today\"\nNo injuries → show the clean bill of health line\n\n\n\nKeep the box score concise — include the linescore (innings R/H/E) but NOT the full box score text (it's too long for chat). Only include the full boxscore if the user explicitly asks for more detail.\n\n\nOff-season handling — If neither yesterday nor today has a game and there are no injuries to report, respond with just HEARTBEAT_OK so no message is delivered. The script covers all game types (spring training, regular season, postseason, exhibition), so true off-season gaps are only mid-November through late February."
      }
    ],
    "body": "MLB Daily Scores\n\nFetches yesterday's game recap and today's upcoming game preview for the user's configured favourite MLB team. Includes spring training, regular season, postseason (Wild Card, Division Series, Championship Series, World Series), and exhibition games.\n\nData Source\n\nUses the free MLB Stats API (statsapi.mlb.com). No API key required.\n\nSetup (one-time)\n1. Install dependencies\n\nRun the setup script to install the Python packages:\n\n# macOS/Linux\nbash {baseDir}/setup.sh\n\n# Any platform (including Windows)\npython {baseDir}/setup.py\n\n\nOr install manually:\n\npip install --user MLB-StatsAPI requests\n\n2. Configure your team\n\nAdd this to ~/.openclaw/openclaw.json under skills.entries:\n\n{\n  skills: {\n    entries: {\n      \"mlb-daily-scores\": {\n        enabled: true,\n        config: {\n          team: \"Toronto Blue Jays\", // Your favourite team (full name)\n          timezone: \"America/Toronto\", // Your local timezone (IANA format)\n        },\n      },\n    },\n  },\n}\n\n\nValid team names — use the full official name: Arizona Diamondbacks, Atlanta Braves, Baltimore Orioles, Boston Red Sox, Chicago Cubs, Chicago White Sox, Cincinnati Reds, Cleveland Guardians, Colorado Rockies, Detroit Tigers, Houston Astros, Kansas City Royals, Los Angeles Angels, Los Angeles Dodgers, Miami Marlins, Milwaukee Brewers, Minnesota Twins, New York Mets, New York Yankees, Oakland Athletics, Philadelphia Phillies, Pittsburgh Pirates, San Diego Padres, San Francisco Giants, Seattle Mariners, St. Louis Cardinals, Tampa Bay Rays, Texas Rangers, Toronto Blue Jays, Washington Nationals.\n\n3. Set up the daily cron job\n\nAsk me to set it up, or run manually:\n\nopenclaw cron add \\\n  --name \"MLB Daily Scores\" \\\n  --cron \"0 6 * * *\" \\\n  --tz \"America/Toronto\" \\\n  --session isolated \\\n  --message \"Run the mlb-daily-scores skill for my configured team. Use the fetch_mlb.py script, format the results nicely, and include yesterday's recap, today's preview, and any injuries.\" \\\n  --announce \\\n  --channel discord \\\n  --to \"channel:YOUR_CHANNEL_ID\"\n\n\nAdjust the parameters:\n\n--cron \"0 6 * * *\" — time to run (6:00 AM); change to your preferred time\n--tz — your timezone\n--channel — your preferred channel (discord, telegram, whatsapp, slack, etc.)\n--to — channel-specific target (channel ID, phone number, chat ID, etc.)\nHow to use\nAutomatic (cron)\n\nOnce the cron job is set up, the skill runs daily at your configured time and delivers the report to your channel.\n\nOn demand (slash command)\n\nSend /mlb-daily-scores in any chat to get an immediate update.\n\nManual invocation\n\nAsk me: \"What happened in the Blue Jays game yesterday?\" or \"Give me today's MLB update\"\n\nInstructions for the agent\n\n{baseDir} in these instructions refers to the directory containing this SKILL.md file. Determine this path from the location of this file (e.g., if this file is at /home/openclaw/.openclaw/workspace/skills/mlb-daily-scores/skills/mlb-daily-scores/SKILL.md, then {baseDir} is /home/openclaw/.openclaw/workspace/skills/mlb-daily-scores/skills/mlb-daily-scores).\n\nWhen this skill is invoked (via cron, slash command, or user request):\n\nDetermine the base directory — find the directory where this SKILL.md and fetch_mlb.py are located. Call this BASEDIR.\n\nRead the user's config from skills.entries.mlb-daily-scores.config:\n\nteam: the MLB team name (required)\ntimezone: IANA timezone string (optional, defaults to system timezone)\n\nRun the fetch script using this EXACT command pattern (replacing BASEDIR with the actual path):\n\nBASEDIR/.venv/bin/python3 BASEDIR/fetch_mlb.py --config\n\n\nIMPORTANT: You MUST use the venv Python at BASEDIR/.venv/bin/python3. Do NOT use python, python3, or any other Python interpreter — the required packages are only installed inside the .venv virtual environment. Using any other Python will fail with import errors.\n\nThe --config flag tells the script to read team/timezone directly from ~/.openclaw/openclaw.json. No user values should be interpolated into the command string. This outputs JSON to stdout.\n\nParse the JSON output and check has_data:\n\nIf has_data is false and there's no error: it's off-season or a day off. Reply with HEARTBEAT_OK (this suppresses the message in cron/heartbeat mode).\nIf has_data is false and there's an error field: report the error to the user.\nIf has_data is true: format the report as described below.\n\nFormat the report using this structure (include game_type from the JSON when it is not Regular Season):\n\n⚾ MLB Daily Report — [Team Name]\n📅 [Today's Date]\n\n━━━━━━━━━━━━━━━━━━━━━━━\n📊 YESTERDAY'S RECAP [game_type, e.g. \"(Spring Training)\" — omit if Regular Season]\n━━━━━━━━━━━━━━━━━━━━━━━\n\n[Score Line, e.g.: Blue Jays 5, Yankees 3]\n\n  W: [Winning Pitcher]\n  L: [Losing Pitcher]\n  S: [Save Pitcher, if any]\n\nLINE SCORE:\n[Linescore text from the API]\n\n━━━━━━━━━━━━━━━━━━━━━━━\n🔮 TODAY'S PREVIEW [game_type, e.g. \"(Spring Training)\" — omit if Regular Season]\n━━━━━━━━━━━━━━━━━━━━━━━\n\n[Opponent] @ [Home Team]\n🕐 [Game Time in local timezone]\n🏟️ [Venue]\n\nStarting Pitchers:\n  [Away Team]: [Pitcher Name] ([W-L], [ERA] ERA)\n  [Home Team]: [Pitcher Name] ([W-L], [ERA] ERA)\n\n━━━━━━━━━━━━━━━━━━━━━━━\n🏥 INJURY REPORT\n━━━━━━━━━━━━━━━━━━━━━━━\n\n[For each injury]:\n• [Player Name] ([Position]) — [Injury Description] [Status]\n\n[If no injuries]: ✅ No players currently on the injury list.\n\n\nOmit sections that have no data:\n\nNo yesterday game → skip the recap section, note \"No game yesterday\"\nNo today game → skip the preview section, note \"No game scheduled today\"\nNo injuries → show the clean bill of health line\n\nKeep the box score concise — include the linescore (innings R/H/E) but NOT the full box score text (it's too long for chat). Only include the full boxscore if the user explicitly asks for more detail.\n\nOff-season handling — If neither yesterday nor today has a game and there are no injuries to report, respond with just HEARTBEAT_OK so no message is delivered. The script covers all game types (spring training, regular season, postseason, exhibition), so true off-season gaps are only mid-November through late February."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/jeremydouglaslaw-ui/mlb-daily-scores",
    "publisherUrl": "https://clawhub.ai/jeremydouglaslaw-ui/mlb-daily-scores",
    "owner": "jeremydouglaslaw-ui",
    "version": "1.0.13",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/mlb-daily-scores",
    "downloadUrl": "https://openagent3.xyz/downloads/mlb-daily-scores",
    "agentUrl": "https://openagent3.xyz/skills/mlb-daily-scores/agent",
    "manifestUrl": "https://openagent3.xyz/skills/mlb-daily-scores/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/mlb-daily-scores/agent.md"
  }
}