German Newsfeed MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@German Newsfeed MCP ServerWas sind die aktuellen Schlagzeilen?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
German Newsfeed MCP Server
Disclaimer: This is a private, unofficial project. It is not an ARD product and is neither operated nor endorsed by ARD, ARD-aktuell, or NDR. It is developed independently of the author's professional employment. "ARD" and "tagesschau" are trademarks of their respective owners and are named here solely to describe the API being accessed.
This project merely connects the public API to an MCP-capable AI assistant. ARD-aktuell is responsible for the API itself, its operation, and its content; this project cannot provide information on any of those. Please raise any concerns about this project, in particular from rights holders, as a GitHub issue. Substantiated concerns will be addressed promptly.
In thirty seconds
This Model Context Protocol (MCP) server
connects your AI assistant (Claude Desktop and others) to the public news
API of tagesschau.de: current headlines, category and regional news, and
full-text search, locally via stdio, no API key required.
Example: asked "Was sind die aktuellen Schlagzeilen?", the assistant answers with the current top stories from tagesschau.de, each with title, date, summary, and a link to the article.
Language:
π©πͺ Deutsch
π¬π§ English
Related MCP server: news-monitor-mcp
What is this?
This MCP server connects the public news API of tagesschau.de to your AI assistant (Claude, Open Claw, etc.).
Once connected, your AI can answer questions like:
"Was sind die aktuellen Schlagzeilen?"
"Zeig mir die neuesten Wirtschaftsnachrichten."
"Suche nach Artikeln ΓΌber Ukraine."
"Welche Regionalnachrichten gibt es aus Bayern?"
For details on the API and its terms, see Data Source and Terms of Use. No API key required.
Data Source and Terms of Use
This server calls the publicly accessible endpoint
www.tagesschau.de/api2u/, operated by ARD-aktuell. The delivered
content originates from the ARD broadcasters, remains subject to their
rights and to the terms of use of tagesschau.de:
https://www.tagesschau.de/nutzungsbedingungen/
The API is not officially documented. Community documentation is available at bund.dev (https://tagesschau.api.bund.dev). bund.dev is a civil-society documentation project, neither the operator of the API nor a rights holder of the content. Its documentation served as a reference for this project but does not grant any usage rights.
Applicable limits: at most 60 requests per hour, and no republication of the content except for offerings under a CC licence (https://tagesschau.de/creativecommons). Compliance is the responsibility of whoever operates a given instance.
The robots.txt of tagesschau.de additionally declares an express reservation of rights under Section 44b(3) of the German Copyright Act (as of 2026-05-19): text and data mining and the automated use of the content for training or fine-tuning AI models are prohibited without written consent. Expressly exempt is automated access for the sole purpose of retrieval-augmented generation (RAG) or grounding, provided the technical directives of the robots.txt are complied with and the content remains attributed to its original source. This server falls under that exemption: it passes content to the assistant exclusively together with source links. The retrieved content must not be used to train AI models.
Features
ποΈ Live news | Fetches breaking news, categorised news, and regional news in real time |
π Full-text search | Search across all available articles |
πΊ Live streams | List all available channels and HLS stream URLs |
β±οΈ Rate limiter | Local token bucket honouring the API's 60/h limit |
π Dual transport |
|
π³ Docker-ready | Multi-stage image, non-root user, health-check, resource limits |
β 273 tests | 251 unit tests + 22 live integration tests |
π οΈ Makefile |
|
π No secrets | Public API, no API keys |
Project Structure
german-newsfeed-mcp/
βββ src/
β βββ german_newsfeed_mcp/
β βββ __init__.py # Package metadata
β βββ config.py # Environment-driven configuration
β βββ client.py # Async HTTP client (httpx) + error handling
β βββ rate_limiter.py # Token-bucket rate limiter
β βββ validators.py # Domain constants + validation helpers
β βββ formatters.py # Markdown rendering of news items & channels
β βββ tools.py # MCP tool business logic
β βββ resources.py # MCP resource business logic
β βββ server.py # Composition root: FastMCP + run() entry-point
βββ tests/
β βββ conftest.py # Shared fixtures & mock payloads
β βββ test_client.py # Client unit + live integration tests
β βββ test_rate_limiter.py # Rate-limiter unit tests
β βββ test_validators.py # Validator unit tests (URL & ressort checks)
β βββ test_formatters.py # Formatter unit tests (pure functions)
β βββ test_tools.py # Tool unit + live integration tests
β βββ test_resources.py # Resource unit + live integration tests
βββ main.py # Thin entry-point (calls server.run())
βββ pyproject.toml # Project metadata, deps, pytest & pylint config
βββ uv.lock # Locked dependency graph (commit this!)
βββ Dockerfile # Multi-stage production image
βββ docker-compose.yml # One-command remote deployment
βββ .env.example # Configuration template
βββ Makefile # Developer shortcuts (test, lint, docker, clean)
βββ CHANGELOG.md # Version history
βββ CONTRIBUTING.md # How to contribute
βββ README_de.md # German version of this fileQuick Start Local (Claude Desktop)
Also applicable to other AI assistants, edit their respective config instead. This mode uses stdio transport; the server is launched as a child process. No port is needed.
Prerequisites
macOS / Linux / Windows (WSL2)
uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
Step 1: Clone and install
git clone https://github.com/Jakolo121/german-newsfeed-mcp.git
cd german-newsfeed-mcp
uv syncStep 2: Verify it works
uv run python -c "from german_newsfeed_mcp.server import mcp; print('OK!', mcp.name)"
# Expected: OK! German Newsfeed MCPStep 3: Connect Claude Desktop
Open your Claude Desktop config file:
OS | Path |
macOS |
|
Windows |
|
Linux |
|
Add the following entry (adjust the path to your clone):
"german-newsfeed": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/german-newsfeed-mcp",
"run",
"german-newsfeed-mcp"
]
},Step 4: Restart Claude Desktop
Quit and reopen the application, or reload its MCP servers, depending on the application.
Step 5: Try it!
Ask your assistant:
"Was sind die aktuellen Nachrichten?"
Remote / Docker Deployment
Self-hosting for your own or team-internal use. The recommended default
is stdio (see Quick Start);
the streamable-http transport is an option you choose deliberately.
Security note: The HTTP transport has no authentication. Do not
expose it publicly without an authentication layer in front (e.g. a
reverse proxy). The Compose setup therefore deliberately binds the port
to 127.0.0.1 only. Whoever makes an instance reachable for third
parties becomes the responsible operator under the
terms of use.
Rate limiter limitations: stateless_http=True refers to MCP
sessions, not to the rate limiter. The token bucket is process-local
in-memory state. Two limitations follow:
Multiple replicas against the same upstream API multiply the request budget.
A container restart resets the bucket to full. Combined with
restart: unless-stoppedand a crash loop, this can exceed the limit. Watch the logs.
(The legacy sse transport is still supported.)
Prerequisites
Docker 24+
Docker Compose v2+
Step 1: Create your .env file
cp .env.example .env
# Edit .env if you want a different port or log levelStep 2: Build and start
docker compose up --build -dOr:
make docker-build
make docker-runThe server starts at http://localhost:8000.
Step 3: Verify health
docker compose logs german-newsfeed-mcp
docker compose psOr:
make docker-logsStep 4: Connect Claude Desktop (Streamable HTTP)
"german-newsfeed": {
"command": "npx",
"args": ["mcp-remote", "http://localhost:8000/mcp"]
},For external servers: put an authentication layer in front first (see the security note above), then adjust the loopback binding in docker-compose.yml and replace localhost with your proxy's address.
Stop / Update
docker compose down
docker compose up --build -dConfiguration Reference
All settings are read from environment variables (or a .env file).
Variable | Default | Description |
|
|
|
|
| Bind address (HTTP transports only) |
|
| HTTP port (HTTP transports only) |
|
| DEBUG, INFO, WARNING, ERROR |
|
| Local request budget per hour towards the upstream API |
| β | Optional: contact info in the User-Agent header; omitted when unset |
The defaults apply when running directly (uv run german-newsfeed-mcp).
The Compose setup overrides them: it sets HOST=0.0.0.0 and PORT=8000
(see docker-compose.yml).
Available Tools
These tools are callable by your AI assistant.
get_latest_news
Get the top stories.
Returns the full article text for each item (homepage feed). Every item also carries a π Volltext: link that get_article accepts.
Parameter | Type | Default | Description |
| int | 10 | Max items to return |
get_article
Get the complete text of a single article.
Takes the π Volltext: link printed with every item by get_latest_news, get_news_by_ressort and get_regional_news; a plain https://www.tagesschau.de/<path>.html article link works too.
Parameter | Type | Default | Description |
| str | β | Article link shown in a news listing |
Costs exactly one upstream request per call out of the 60/h budget β call it for the articles that matter, not for every headline in a listing.
search_newsresults carry no article link and cannot be passed toget_article. Locate the article viaget_latest_news,get_news_by_ressortorget_regional_newsfirst.
get_news_by_ressort
Filter news by category.
Returns metadata only β title, topline, date and a teaser sentence β no full article text. Every item carries a π Volltext: link that get_article resolves into the full text.
Parameter | Type | Default | Description |
| str | β |
|
| int | 10 | Max items to return |
Ressort strings are automatically normalised to lowercase:
"Inland","INLAND"and"inland"are all equivalent.
get_regional_news
News from a specific German state.
Returns metadata only β title, topline, date and a teaser sentence β no full article text. Every item carries a π Volltext: link that get_article resolves into the full text; because regional items originate at an ARD state broadcaster, they additionally carry a π° Quelle: line naming that broadcaster.
Parameter | Type | Default | Description |
| int | β | 1=BW Β· 2=BY Β· 3=BE Β· 4=BB Β· 5=HB Β· 6=HH Β· 7=HE Β· 8=MV Β· 9=NI Β· 10=NW Β· 11=RP Β· 12=SL Β· 13=SN Β· 14=ST Β· 15=SH Β· 16=TH |
| str | None | Optional category filter |
| int | 10 | Max items to return |
search_news
Full-text search across all available articles.
Returns metadata only β title, date and article type β no full article text. Search results carry no article link and therefore cannot be passed to get_article.
Parameter | Type | Default | Description |
| str | β | Search query |
| int | 10 | Results per page (max 30) |
| int | 0 | Page offset (0-based) |
get_channels
List all live channels with stream URLs.
(No parameters)
Available Resources
Resources are addressable URIs that MCP clients can read directly.
URI | Description |
| Homepage top stories |
| News by category |
| Regional news by state ID |
| Search results |
| Available channels & streams |
Development Guide
Setup
git clone https://github.com/Jakolo121/german-newsfeed-mcp.git
cd german-newsfeed-mcp
uv sync --extra devStart the server:
uv run german-newsfeed-mcpOr:
make runCode organisation (SOLID)
Each module has exactly one responsibility:
Module | Responsibility |
| Read & expose env vars |
| HTTP requests + error handling |
| Local request budget (token bucket) |
| Domain constants ( |
| Turn raw API dicts into Markdown |
| Validate inputs, call client, call formatter |
| Same as tools but for MCP resources |
| Composition root: assemble FastMCP, register handlers, start |
Adding a new tool
Add a
tool_<name>()async function intools.pyRegister it with
@mcp.tool()inserver.pyWrite unit + integration tests in
tests/test_tools.py
Running the Tests
Unit tests (no internet required, fast)
uv run pytest -m "not integration" # run all unit tests
uv run pytest -m "not integration" -v # verbose output
uv run pytest tests/test_formatters.py # single fileOr:
make testLive integration tests (requires internet)
uv run pytest -m integration # all live tests
uv run pytest -m integration -v # verboseFull suite
uv run pytestOr:
make test-allQuality gate (lint + tests)
uv run pylint src/german_newsfeed_mcp/
uv run pytestOr:
make checkExpected results
251 passed β unit tests (no network)
22 selected β integration tests (live API)Makefile Reference
make test # fast unit tests (no network, ~0.3 s)
make test-all # unit + live integration tests
make lint # pylint
make check # lint + unit tests β use as CI gate
make run # start server in stdio mode (Claude Desktop)
make run-http # start server in streamable-http mode
make docker-build # build Docker image
make docker-run # docker compose up -d
make docker-stop # docker compose down
make docker-logs # tail docker compose logs
make clean # remove __pycache__, .pytest_cache, dist, etc.Troubleshooting
Claude Desktop shows no MCP tools
Check that the
claude_desktop_config.jsonpath is absoluteRun
uv run python main.pyin the terminal, it should start without errorsFully quit and reopen Claude Desktop (Cmd+Q, not just close window)
Docker container exits immediately
docker compose logs german-newsfeed-mcpOr:
make docker-logsCommon causes: wrong TRANSPORT value (must be streamable-http in Docker), port already in use.
API timeouts
The upstream API occasionally rate-limits certain endpoints. This is normal, the server returns a descriptive error message rather than crashing. Retry after a few seconds.
Rate-limit errors
If the server reports "Rate limit exceeded", the local request budget (RATE_LIMIT_PER_HOUR, default 60/h) is exhausted. No request was sent upstream. Try again later.
Import errors in tests
uv sync --extra dev # ensure dev deps are installed
uv run pytest # always run via uv, not bare pytestWhen it stops working
The upstream API is not officially documented and can change without
notice. You can tell by the tools suddenly returning empty lists or
error messages although tagesschau.de is reachable, and by the live
integration tests failing (uv run pytest tests/ -m integration).
All endpoints are defined in a single place: ENDPOINTS in
src/german_newsfeed_mcp/client.py. API changes can be tracked there.
The CI job upstream-check (.github/workflows/ci.yml) runs exactly
these live tests weekly against the real API and fails loudly when the
response format no longer matches.
License & Acknowledgements
Apache License 2.0.
The delivered news items are content of the ARD broadcasters, subject to their rights and the terms of use of tagesschau.de, see Data Source and Terms of Use.
Thanks to AndreasFischer1985, the bund.dev community for documenting the API and above all to the journalists at the ARD broadcasters, whose work this project merely passes along.
Available Tools
5 toolsget_channelsA
Get information about available Tagesschau channels and livestreams.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It implies a read-only operation (get information) but does not disclose details such as return format, possible empty results, or whether livestream availability is dynamic. The existence of an output schema somewhat mitigates the lack of return-value details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the action and resource. No redundancy or filler; every word contributes to understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool, the description is largely complete. It conveys the core purpose and distinguishes from siblings. The output schema likely covers return values. Minor gap: no mention of whether the channel list varies by region or time, which could be relevant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description need not explain parameter meanings. The schema is empty and the description accurately reflects that no input is required. This is the baseline 4 for a no-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the specific resource 'available Tagesschau channels and livestreams.' This distinguishes it from sibling news-content tools (get_latest_news, search_news, etc.) because it targets channel/livestream metadata rather than articles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when channel/livestream information is needed) but provides no explicit guidance about alternatives or exclusion scenarios. It does not mention sibling tools or contrast with news retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_newsA
Get the latest news from Tagesschau.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of news items to return (default: 10). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It only says 'Get the latest news' with no details on sorting, time windows, or potential pagination. While not misleading, it fails to specify any behaviors beyond the basic retrieval intent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence of six words, immediately stating the core action and subject. No filler or redundancy. For a tool with one parameter, this level of brevity is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with an output schema covering return structure and a single parameter. However, the description omits any context about what constitutes 'latest', how the limit is applied, or any access constraints. Sufficient for basic use but lacking in depth for a fully informed agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'limit' parameter with a clear description. The tool description adds no further parameter explanation, so it does not surpass the schema's contribution. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Get') and resource ('latest news from Tagesschau'). It is unambiguous and implicitly distinguishes from sibling tools like search_news or get_news_by_ressort, which serve different needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving current top news items, but does not explicitly state when to choose this over alternatives (e.g., search_news for queries, get_regional_news for locations). No exclusions or alternative references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_news_by_ressortA
Get news by ressort/category.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of news items to return (default: 10). | |
| ressort | Yes | The ressort/category to filter by. Options: inland, ausland, wirtschaft, sport, video, investigativ, wissen. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states the basic purpose with no disclosure of return format, pagination, error behavior, or authentication needs. The read-only nature is implied by 'Get' but not made explicit or expanded upon.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core action and resource. It is concise with no redundant words, and every part directly contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists and parameters are well documented, covering return values and input details. However, the description lacks usage guidance relative to sibling tools and does not mention any behavioral constraints. For a simple get tool it is near-complete, but the missing sibling differentiation and behavioral context prevent a higher score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% description coverage for both parameters, so the schema already explains 'ressort' and 'limit'. The description adds no additional meaning beyond restating 'ressort/category', which is already in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Get' with the resource 'news' and a clear filter 'by ressort/category'. It differentiates from sibling tools like get_latest_news (which suggests unfiltered latest news) and search_news (which suggests keyword-based search) by specifying a category filter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context implies using this tool when news needs to be filtered by a category, but there is no explicit when-to-use/when-not-to-use statement or mention of alternatives. The sibling names provide some clues, but the description itself offers no direct guidance on choosing this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_regional_newsA
Get regional news for a specific German state.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of news items to return (default: 10). | |
| ressort | No | Optional category filter. | |
| region_id | Yes | The ID of the region/state. 1=Baden-WΓΌrttemberg, 2=Bayern, 3=Berlin, 4=Brandenburg, 5=Bremen, 6=Hamburg, 7=Hessen, 8=Mecklenburg-Vorpommern, 9=Niedersachsen, 10=Nordrhein-Westfalen, 11=Rheinland-Pfalz, 12=Saarland, 13=Sachsen, 14=Sachsen-Anhalt, 15=Schleswig-Holstein, 16=ThΓΌringen. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only restates the tool's purpose and does not disclose ordering, pagination, default behavior, or any constraints beyond what the schema already covers. The description adds minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, concise sentence that clearly states the tool's purpose. No superfluous words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool, the rich parameter schema (100% coverage), and the presence of an output schema, the description is nearly sufficient. It communicates the core purpose and geographic scope, though it misses explicit guidance on when to use it versus siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has detailed descriptions including the region_id mapping. The description's mention of 'specific German state' reinforces region_id's purpose but adds no new semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') with a clear resource ('regional news') and scope ('specific German state'). It effectively distinguishes from siblings like get_latest_news and get_news_by_ressort by focusing on regional/state-based filtering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: 'regional news' suggests using this tool for state-specific news, while siblings cover latest, category, or search. However, no explicit guidance is given on when to prefer this over alternatives, and no exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_newsB
Search for news articles by keyword.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | Results per page (default: 10, max: 30). | |
| result_page | No | Page number for pagination (default: 0). | |
| search_text | Yes | The text to search for. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but it only restates the search functionality. It does not disclose any behavioral traits such as result ordering, scope (global vs. filtered), or output structure (though output schema exists).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. Every element is necessary and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description is adequate but incomplete. It does not address how it relates to sibling tools, nor does it clarify search scope or behavior beyond the literal function.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage of parameter descriptions, so the tool description does not need to repeat them. The description adds no additional parameter semantics, matching the baseline of 3 for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('search') and resource ('news articles'), and the keyword mechanism distinguishes it from sibling tools that fetch by section or recency. This gives the agent a precise understanding of what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use search_news versus get_latest_news, get_news_by_ressort, etc. No alternatives or exclusions are mentioned; the usage context is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v2.0.2- First observed
get_channels - First observed
get_latest_news - First observed
get_news_by_ressort - First observed
get_regional_news - First observed
search_news
TDQS
Each tool targets a distinct retrieval mode: latest feed, category, region, keyword search, and channel info. There is no overlap in their purposes, so an agent can easily select the right tool.
All tool names follow a consistent 'get_<noun>' pattern, with clear resource descriptors like 'latest_news', 'news_by_ressort', or 'channels'. This uniform naming style makes the set predictable.
With 5 tools, the server is well-scoped for a newsfeed service. Each tool covers a necessary access pattern without redundancy, fitting comfortably within the optimal range.
The tool surface comprehensively covers the expected operations for a newsfeed: general latest news, category filtering, regional news, keyword search, and channel access. No obvious gaps exist for the stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Dive into the latest and greatest from the tech world with our Hacker News MCP server.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
MCP server for AI dialogue using various LLM models via AceDataCloud
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that fetches RSS feeds and shares them with LLMs, allowing AI assistants to access and present the latest news and articles from configured feeds.19-
- AlicenseAqualityAmaintenanceMCP server for global news monitoring, media analysis and sentiment tracking via WorldNewsAPI β full-text search across 150+ countries, German/English sentiment analysis, top headlines, GL briefings, newspaper front pages and geo-search. API key required.15MIT
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol (MCP) server that provides real-time news intelligence using NewsAPI.ai. This server enables LLMs to search articles, track events, and analyze news through natural conversation.122MIT
- FlicenseNot gradedqualityDmaintenanceAn AI-powered news aggregator MCP server that fetches live news from multiple sources, provides AI summaries via Claude, and performs sentiment analysis and trending topic detection.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jakolo121/german-newsfeed-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server