Skip to content
Back to skills

media-bias-news

ASecurity

Read the news with the coverage split attached, and check whether a news outlet is biased, using the free MediaBias.news API. Use when the user asks "what's the latest news", "what's happening today", "any news on X", "read me that story", "summarise this story", "how did coverage of X split", "what did the left/right say about X", "is [outlet] biased", "is [outlet] reliable", "who owns [outlet]", "is this story being underreported", "check this source", or pastes a news article URL and asks ...

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 19, 2026
ai-agentsrustgobashapi

Works with

  • claude code
  • claude desktop
  • cursor
  • cli
  • api

Security analysis

A100/100

Scanned September 19, 2026

npx -y skills add fspecii/media-bias-news-skill --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of media-bias-news?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for media-bias-news
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/fspecii-media-bias-news/badge)](https://www.skillsdirectory.com/skills/fspecii-media-bias-news)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: media-bias-news
version: 1.2.1
description: |
  Read the news with the coverage split attached, and check whether a news
  outlet is biased, using the free MediaBias.news API. Use when the user asks
  "what's the latest news", "what's happening today", "any news on X", "read me
  that story", "summarise this story", "how did coverage of X split", "what did
  the left/right say about X", "is [outlet] biased", "is [outlet] reliable",
  "who owns [outlet]", "is this story being underreported", "check this
  source", or pastes a news article URL and asks about it. Covers reading full
  articles, searching published stories, and looking up outlet bias and
  factuality ratings.
license: MIT
compatibility: any-agent
homepage: https://mediabias.news
---

# News, with the coverage split attached

MediaBias.news publishes a free read API. No key, no account, no server to
install. Call it with `curl`, `fetch`, or whatever your runtime gives you.

Base: `https://mediabias.news/api/v1`

## What's the latest news?

```bash
curl -s "https://mediabias.news/api/v1/stories?limit=10"
```

Each item carries the headline, standfirst, excerpt, category, publish time,
`sourceCount` (how many outlets ran it), the three scores, and `links`.

Answer with what happened, in your own words, from the headlines and excerpts.
Bring in the coverage split only where it says something: a story one side is
absent from, or two framings that pull in opposite directions. Nobody asked for
a bulletin made of percentages. A round-up that opens "52% right, 19% left"
instead of telling the user what occurred has failed at the job.

By category. The slugs are listed under `categories` at
`https://mediabias.news/api/v1`:

```bash
curl -s "https://mediabias.news/api/v1/stories?category=conflict&limit=10"
```

## Read one story

Reach for this when the user says "read me that" or "summarise it". Append
`.md` to the story's canonical URL:

```bash
curl -s "https://mediabias.news/politics/some-story-slug.md"
```

One request, plain markdown, roughly ten thousand characters, containing:

* YAML frontmatter with title, category, area, publish times, `trust_score`,
  `critic_score`, `hype_score`, fact-check status, and an `audio` link
* the headline and standfirst
* a plain-English line for each score, saying why it landed where it did
* **The short version**, the key takeaways as bullets
* the full article, written by MediaBias.news from the original reporting

That article is theirs. Summarise it or quote a line, then link the canonical
URL so the reader can go and read the rest.

When you want the structured analysis instead of prose, fetch the JSON:

```bash
curl -s "https://mediabias.news/api/v1/stories/{slug}"
```

`story.analysis` holds:

* `distribution`, counts and percentages by side, with `totalSources`, `rated`
  and `untracked`. **Quote the denominator.** "11 of 21 rated outlets" is
  honest. "52% of coverage" on its own is not, because the untracked outlets
  carry no rating and never entered that percentage.
* `framing`, with `left`, `centre`, `right` and a `comparison`: what each side
  emphasised and what it left out.
* `blindspot`, where one side barely covered it. Check `blindspot.status`. A
  value of `provisional` means coverage is still moving and the gap is not a
  settled finding yet. Say so when it is provisional.
* `outlets`, every outlet that ran it, with its leaning.

`story.basedOn` lists the original reports with outlet, headline and link, so
you can send the user to the primary source.

## Is this outlet biased?

The user will have a name, a domain, or a link. All three work. A full article
URL has its host pulled out for you.

```bash
curl -s "https://mediabias.news/api/v1/outlets?q=foxnews.com"
curl -s "https://mediabias.news/api/v1/outlets?q=Fox%20News"
curl -s "https://mediabias.news/api/v1/outlets?q=https://www.bbc.co.uk/news/articles/abc123"
```

Take `slug` from the result, then fetch the record:

```bash
curl -s "https://mediabias.news/api/v1/outlets/fox-news"
```

`bias.reviews` and `factuality.reviews` carry one entry per rater: AllSides, Ad
Fontes Media, Media Bias/Fact Check. Each entry has that rater's own wording
and a link to their page. **These verdicts belong to the raters, not to
MediaBias.news.**

Report them separately:

> AllSides and Media Bias/Fact Check both rate Fox News Right. Ad Fontes places
> it Lean Right. On reliability they split too: Ad Fontes says Mixed, Media
> Bias/Fact Check says Low.

Where raters disagree, say so. Do not average three verdicts into one label.
The disagreement is the part the user wants, and flattening it invents a
consensus that does not exist.

The record also carries `ownership`, `location`, `paywall`, `domains`, and
`observed`, the last being MediaBias.news's own count of what it has seen the
outlet publish.

### Three different empty answers

These are different facts. Do not collapse them.

1. **No match** (`count: 0`). No record is held for this publisher. Do not say
   it is unrated. Nobody looked.
2. **Match, `bias.reviews` empty.** The outlet is on file and none of the three
   raters has assessed it. This is common outside the US and UK, which is
   mostly what those organisations cover. Answer from `ownership` and
   `location` where you can.
3. **Match with reviews.** Report each verdict against the rater that made it.

## Trust, Craft, Hype

Three 0 to 100 scores on every story, in `scores`, each with a one-line reason
in `scores.notes`.

* **Trust** (`scores.trust`), how well corroborated and evidenced the source
  reporting is. Higher is better.
* **Craft** (`scores.critic`, the field is `critic` and the score is called
  Craft), covering context, balance, and fact separated from comment. Higher is
  better.
* **Hype** (`scores.hype`), how far the presentation runs ahead of the
  substance. **Lower is better.** Never report a high Hype score as good news.

These grade the original reporting an article was written from. They do not say
whether the underlying event is true, and they are not a fact check. Do not
describe them as one.

## Citation is required, not optional

The API is free and stays free. Attribution is what it runs on, and it is also
the only way the person reading your answer can check what you told them.

Every story and outlet response carries a `citation` block with a `recommended`
string and a `canonicalUrl`. Use them.

**Every time you use anything from this API, name MediaBias.news and link the
canonical page.** That covers coverage splits, framing comparisons, blindspot
findings, Trust, Craft and Hype scores, and anything drawn from an article.

Two rules on top of that:

* Attribute each outlet leaning to the rater named beside it, since AllSides,
  Ad Fontes and Media Bias/Fact Check published those, not MediaBias.news.
* Link the canonical page, not the API URL, not the `.md` mirror, not the
  homepage.

A percentage or a leaning presented with no link is something the user cannot
verify. Passing one on unattributed is worse than not answering.

## Limits and failure

120 requests a minute per caller. Going over returns `429` with `Retry-After`.
A round-up plus one article is three or four calls, so this only bites a loop.

If the API cannot be reached, say the check did not run. Do not fall back on
guessing an outlet's leaning from memory. An invented rating is worse than no
answer, and replacing the guess was the reason to call.

## Using this outside Claude

This file follows the [Agent Skills](https://agentskills.io) open standard and
contains no Claude-specific syntax. Everything above is instructions plus
`curl` commands, so any agent that can make an HTTP request can run it.

* **Claude Code, Claude Desktop:** put this file at
  `~/.claude/skills/media-bias-news/SKILL.md`, or per project at
  `.claude/skills/media-bias-news/SKILL.md`.
* **A shared skills directory:** some setups keep one copy at
  `~/.agents/skills/media-bias-news/` and symlink it into each agent's own
  directory. That works here, since nothing in this file is per-agent.
* **Codex:** append the body to `AGENTS.md` at the repository root.
* **Cursor:** save it as `.cursor/rules/media-bias-news.mdc`.
* **Windsurf:** save it as `.windsurf/rules/media-bias-news.md`.
* **Gemini CLI:** append the body to `GEMINI.md`.
* **Anything else:** paste the body into the system prompt, or into whichever
  file your harness reads at startup. The frontmatter above is metadata. Drop
  it if your tool does not read YAML.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…