media-cloud-mcp
An MCP server for Media Cloud, the open archive of online news used for media research. It lets an AI assistant measure how much attention news media pay to a topic, compare sources and countries, examine the language of coverage, and find story URLs.
This is an independent project, not an official Media Cloud product. It is built on the official mediacloud Python client.
Setup
You need uv and a Media Cloud API key. You don't need to install Python or this package yourself: uvx downloads whatever is missing the first time the server starts.
1. Install uv
On macOS or Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
On Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Then open a new terminal, so that it can find the uvx command.
2. Get a Media Cloud API key
Sign in to Media Cloud, click the person icon at the top right, choose Profile, and copy your API key.
3. Add the server to your MCP client
For Claude Code, run:
claude mcp add media-cloud --env MC_API_KEY=your-api-key -- uvx media-cloud-mcp
For Claude Desktop and other clients that use a JSON configuration, add this to the configuration file. In Claude Desktop, that's claude_desktop_config.json, which you can open from Settings > Developer > Edit Config.
{
"mcpServers": {
"media-cloud": {
"command": "uvx",
"args": ["media-cloud-mcp"],
"env": { "MC_API_KEY": "your-api-key" }
}
}
}
Restart the client after changing its configuration. You don't need to start the server yourself, because the client does that. If you run uvx media-cloud-mcp in a terminal, it waits silently for a client to connect, so it can look frozen. Press Ctrl+C to stop it.
4. Check that it works
Ask your assistant to run the check_connection tool.
Troubleshooting
- The client can't find
uvx: desktop apps may not use the samePATHas your terminal. Runwhich uvx(on Windows,where uvx) and use the full path it prints as thecommand. - The server times out the first time it starts: the first start downloads Python and the dependencies, which can take a while on a slow connection. Restart the client to retry. Downloads are cached, so later starts are faster.
MC_API_KEY is not setor HTTP 401: check that the key is in your client's configuration and was copied correctly, then restart the client.
Using pip instead
With Python 3.11 or newer, you can run pip install media-cloud-mcp and use media-cloud-mcp as the command, with no arguments.
Tools
All tools are read-only.
| Tool | What it does |
|---|---|
check_connection |
Verifies the API key and shows API parameters such as rate limits |
count_stories |
Matching stories, total stories in scope, and their ratio |
count_stories_over_time |
Daily counts and ratios |
count_stories_by_source_over_time |
Counts and ratios per source, per day or week |
list_stories |
Story metadata and URLs, with pagination |
sample_stories |
A random sample of matching stories |
get_story |
Metadata for one story |
top_words |
Most used terms in a sample of matching stories |
top_sources |
Sources publishing the most matching stories |
top_languages |
Most common languages among matching stories |
search_collections |
Find collections, often by country or state |
get_collection |
Details of one collection |
search_sources |
Find sources by name or domain, or list a collection's sources |
get_source |
Details of one source |
list_feeds |
RSS feeds Media Cloud collects from |
The mediacloud://query-guide resource documents the query syntax. The server also sends it to the assistant as part of its instructions.
Example prompts
- "How much did US national media cover climate change in November 2023 compared with Indian national media?"
- "Which Nigerian news sources wrote the most about fuel subsidies last year?"
- "Chart the weekly share of stories about 'artificial intelligence' in the Washington Post in 2024."
- "What words most often appear in coverage of the housing crisis in Boston Globe stories?"
Limits
- Story text: Media Cloud returns metadata and URLs. Copyright restrictions keep full text limited to accounts with elevated access.
- Rate limit and quota: requests are rate limited per account, and the client library waits when it reaches the limit, so a burst of calls can be slow. Your account also has a weekly quota. Contact Media Cloud if you need more.
Development
uv sync
uv run pytest
uv run ruff check .
Tests replace only the HTTP layer and don't need an API key. To try the server interactively:
MC_API_KEY=your-api-key uv run media-cloud-mcp
License
MIT
Metadata
Release files for media-cloud-mcp 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| media_cloud_mcp-0.1.1.tar.gz | 12.9 kB | Without provenance | Details for media_cloud_mcp-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| media_cloud_mcp-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for media_cloud_mcp-0.1.1-py3-none-any.whl |
Total release size: 24.9 kB
Release files / media_cloud_mcp-0.1.1.tar.gz
| Download URL | media_cloud_mcp-0.1.1.tar.gz |
|---|---|
| Size | 12.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1600968728d614c74a9c0023763c2ef9f5332c93b116ed4d734f9444e9c0134b
|
|
BLAKE2b-256 checksum How to use checksums |
20503137ceabc3dd0fa5b0aa0fcb50a33e0a27f3415da21f9106acf88081ddad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.15.1
|
Release files / media_cloud_mcp-0.1.1-py3-none-any.whl
| Download URL | media_cloud_mcp-0.1.1-py3-none-any.whl |
|---|---|
| Size | 12.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4c39c4c3c322534e2e8334583db0fa8aab09cdcb646ec37cff03f1fed9bd9731
|
|
BLAKE2b-256 checksum How to use checksums |
570dea42df08930cfc8cbdb70944bde4079a58c5b02e3bb34cf75337687d452d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.15.1
|
Security for media-cloud-mcp 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.