{
  "markdown": "# Muffed MCP server\n\nVerified NFL stats and Sleeper league context, callable from ChatGPT, Claude,\nClaude Code, Cursor, or any MCP-compatible client.\n\n```\nhttps://muffed.ai/api/mcp\n```\n\nFree. No account, no API key, no OAuth. Read-only.\n\nFull documentation: **<https://muffed.ai/mcp>**\n\n---\n\n## What it is\n\nAn AI asked a football question today either answers from whenever its training\nstopped, or finds a blog post. It cannot realistically download ten seasons of\nplay-by-play and run a rushing-yards-over-expected model.\n\nMuffed already did that. This server makes the result callable.\n\nEvery figure comes back with the rank its source gave it and the population it\nwas ranked against, so a claim arrives as *\"358.16 rushing yards over\nexpectation, 1st of 49\"* rather than as a number with nothing behind it. Each\nresponse also carries a complete, quotable sentence, its own attribution, and an\nas-of date.\n\n**Coverage:** 520 verified metrics, 2016–2025 — EPA splits, CPOE, rushing yards\nover expectation, pressure and blitz rates, coverage splits, snap and target\nshare, red zone and down-conversion rates, and more. Each metric reports the\nseasons it actually has.\n\n## Install\n\n**Claude** (web, desktop, mobile) — one click:\n\n[**Add Muffed to Claude**](https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Muffed&connectorUrl=https%3A%2F%2Fmuffed.ai%2Fapi%2Fmcp)\n\nThat opens the Add-custom-connector dialog with the name and URL already filled;\nyou still review and confirm. By hand: Settings → Connectors → Add custom\nconnector → paste `https://muffed.ai/api/mcp`. There is no sign-in step, because\nthere is nothing to authorize.\n\n**Claude Code** — install the plugin rather than the bare connector:\n\n```bash\n/plugin marketplace add cfagan17/muffed-mcp\n/plugin install muffed@muffed\n```\n\nThe plugin ships the endpoint *and* a skill that teaches the model how to handle\nwhat comes back: quote the pre-formed verified sentence instead of recomposing\nit, carry the attribution verbatim because the credit line is the licence,\nhonour the Half-PPR and charting disclosures, never derive a rank from result\nordering, and never turn verified context into a start/sit call. A bare\nconnector gives a model the data; the plugin also gives it the discipline the\ndata was published under. See\n[`skills/muffed-figures/SKILL.md`](skills/muffed-figures/SKILL.md).\n\nWithout the plugin:\n\n```bash\nclaude mcp add --transport http muffed https://muffed.ai/api/mcp\n```\n\n**ChatGPT** — Settings → Connectors (or Developer mode) → add an MCP server →\npaste the same URL, no authentication.\n\n**Cursor, VS Code, other MCP clients**\n\n```json\n{\n  \"mcpServers\": {\n    \"muffed\": {\n      \"type\": \"http\",\n      \"url\": \"https://muffed.ai/api/mcp\"\n    }\n  }\n}\n```\n\n## Tools\n\n| Tool | What it answers |\n|---|---|\n| `get_current_insights` | What Muffed thinks is actually real about the NFL right now — verified, dated, with the evidence |\n| `query_stat_leaders` | League leaders on any verified metric, each with the rank its source gave it |\n| `get_entity_metrics` | Every verified figure Muffed holds for one player or team |\n| `compare_entities` | Two players or two teams side by side on the metrics both have |\n| `get_metric_definition` | What a metric measures, and which seasons it actually covers |\n| `list_metrics` | Which metrics can be asked about at all — keys and coverage, no figures |\n| `verify_claim` | Checks a stated figure against the verified panel and returns the real one if it disagrees |\n| `get_backfield` | Who backs up a starting running back — and in-season, who replaces an injured one |\n| `run_stat_query` | A figure computed on request — qualified superlatives, multi-season streaks, derived rates — returned with its method, population and data version, and labelled computed rather than verified |\n| `sleeper_find_leagues` | Your Sleeper leagues, from your username |\n| `sleeper_get_league` | Your league's setup — teams, scoring format, roster slots, managers |\n| `sleeper_matchup_preview` | Verified context on both sides of a matchup |\n| `sleeper_roster_stories` | Your roster's players and what's verified about each |\n| `sleeper_standings_story` | Where your league stands, derived from Sleeper's roster records |\n\nEvery tool is read-only. Nothing writes, and no tool returns anything about a\nMuffed user.\n\n## Three rules it is built on\n\n**1 · The panel is a reshaping, never a computation.** Figures are normalized\nfrom a gated verified layer. A build gate re-derives every row back to its\nsource coordinate and fails the build on any drift, so a source refresh that\nmoves a number breaks CI rather than a published sentence.\n\n**2 · Verify the query template, not the sentence.** A handful of parameterized\nqueries are the templates; every instantiation inherits the gate the sources\nalready passed. There is no arbitrary-compute endpoint and there never will be —\na tool that computes a novel number on request returns a figure no gate has\nseen, to a model that will round it, recombine it, and attribute the result.\n\n**3 · The server ranks, filters and rounds. The model never computes.** Few\nrows, pre-sorted, rank and population already attached. Most \"the AI got the\nstat wrong\" failures are a model doing arithmetic on returned data.\n\nWhere the source had no unambiguous rank, **no rank is returned at all** rather\nthan one derived from the result set's ordering.\n\n## Season coverage is answered honestly\n\nRushing yards over expectation exists from **2018**, not 2016 — it is\ntracking-dependent and there is no pre-NGS version. Ask for a decade and the\nserver returns the metric's real coverage instead of eight rows labelled as ten.\n\nEvery metric's registry entry carries the seasons it actually has, and\n`get_metric_definition` is how a model finds that out before making a claim.\n\n## `verify_claim`\n\nHand it a figure your AI has already stated:\n\n```json\n{ \"claims\": [{ \"metric\": \"rb_ryoe.rush_yards_over_expected\",\n               \"entity\": \"James Cook\", \"season\": 2025, \"value\": 361 }] }\n```\n\nIt comes back `wrong`, with the actual value (358.16), the source rank, and the\nattribution. Correct claims come back `confirmed`; a metric or season Muffed\ndoes not hold comes back `unverifiable` with the real coverage rather than a\nguess.\n\nStructured input only — never a sentence. The caller does its own claim\nextraction on its own tokens; the server does a pure lookup.\n\n## What it does not do\n\nNo projections, no start/sit or lineup advice, no draft grades, no picks — in\nany tool, in any phrasing. Where a question calls for one, the tools return\nverified context and let you decide. That is a permanent position, not a v1\nlimitation.\n\nNo draft-market (ADP) data either. The sources for it are licensed to cite, not\nto redistribute; a page may quote a price with credit, but piping someone else's\ndata into your AI is a different thing. Everything served here is data Muffed is\nlicensed to build on.\n\nNo ESPN or Yahoo league support. Sleeper publishes a public read API, so loading\na league needs no login. The alternative for the others would be screen-scraping\nor handling your credentials, and neither is going to happen.\n\n## Privacy\n\nNo account, and nothing about you is stored. A league id is used to answer the\nrequest and cached briefly to be polite to Sleeper's API — never written to a\ndatabase, never linked to you. A salted one-way hash of it is kept for 30 days\nto count roughly how many distinct leagues use the server. **Sleeper usernames\nare not logged in any form.**\n\nFull policy: <https://muffed.ai/privacy>\n\n## Attribution\n\nData via nflverse · NFL Next Gen Stats via nflverse · FTN Data via nflverse.\nLeague data via Sleeper's public API.\n\nEvery response carries its own attribution string verbatim — the credit line is\nthe licence. Charting-derived figures cover the 2025 season only and are dated\nas such.\n\nMuffed verifies the figures as returned, not analysis derived from them.\n\n## Support\n\nIssues on this repo, or <hello@muffed.ai>.\n\nIndividuals, use it freely. If you are calling it at volume or building it into\na product, get in touch first so it stays up for everyone. The underlying\nnflverse data is CC-BY and free — what Muffed adds is verification, structure,\nfreshness, and the story layer.\n\n## About this repository\n\nThis repo holds the server's public manifests, the Claude Code plugin, and the\ndocumentation. The server itself runs as part of muffed.ai, which is\nclosed-source — the plugin is a pointer to the hosted endpoint plus the skill,\nnot a copy of the server.\n\n```\n.claude-plugin/marketplace.json   the marketplace `/plugin marketplace add` reads\n.claude-plugin/plugin.json        the plugin manifest\n.mcp.json                         the endpoint the plugin installs\nskills/muffed-figures/SKILL.md    how to quote the figures correctly\nserver.json                       MCP Registry manifest (`ai.muffed/muffed`)\nglama.json                        maintainer declaration for the Glama listing\n```\n\nTwo separate listings, often confused: `server.json` is the\n[MCP Registry](https://registry.modelcontextprotocol.io) entry, which is what\ngeneric MCP clients and directory crawlers read. The `.claude-plugin/` files are\nthe Claude Code plugin, which is what `/plugin install` reads. Bumping one does\nnot bump the other.\n\n\n## Listed on\n\n[![muffed-mcp MCP server](https://glama.ai/mcp/servers/cfagan17/muffed-mcp/badges/score.svg)](https://glama.ai/mcp/servers/cfagan17/muffed-mcp)\n\n[MCP Registry](https://registry.modelcontextprotocol.io) (`ai.muffed/muffed`) · [Glama](https://glama.ai/mcp/servers/cfagan17/muffed-mcp) · [mcpservers.org](https://mcpservers.org)\n",
  "bytes": 9646,
  "sha": "18626c61648dc1c4d2fbc1be321c343e33462e1df8919b115a4bfa0af8694259",
  "repo_slug": "cfagan17/muffed-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_ai_muffed_muffed_fd8b7788/readme"
}