ai-news-agent
Fetches the latest AI research papers from arXiv and includes them in AI news briefings.
Tracks GitHub trending repositories and releases from AI-related organizations for the AI news briefing.
Pulls news from Google News feeds for Malaysian and German job market briefings.
Gathers posts and discussions from AI-focused subreddits as well as regional subreddits for Malaysian and German news briefings.
Fetches articles from AI blog RSS feeds and includes them in the AI news aggregation.
Click on "Deploy 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., "@ai-news-agentget the latest AI news briefing"
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.
AI News Agent
Multi-topic news aggregation agent suite. Fetches, summarizes, and lets you interactively explore news via CLI or MCP (Model Context Protocol) for use with AI coding assistants like Devin, Claude Code, and opencode.
Agents
Command | Agent | Sources |
| AI News | Hacker News, Reddit (9 AI subs), GitHub trending + releases (26 AI orgs), arXiv, 11 AI blog RSS feeds |
| Malaysian News | Malay Mail, FMT, World of Buzz, Rojak Daily, Coconuts KL, Cilisos, Soya Cincau, Reddit r/malaysia, Google News MY |
| Germany SWE Jobs | The Local DE, DW, Deutschland.de, Reddit (r/germany, r/cscareerquestionsEU, etc.), Google News DE (visa, Blue Card, jobs) |
Related MCP server: MCP Server for Session 13
Quick Start
# Clone and install
git clone https://github.com/sirhafizho/ai-news-agent.git
cd ai-news-agent
python -m venv .venv && source .venv/bin/activate
pip install -e .
# Set your LLM provider key (optional - only needed for AI summarization)
export NEXUS_API_KEY="your-key" # genai-nexus
# Optional: GitHub PAT for trending repos (5000 req/hr vs 60)
export GITHUB_PAT_TOKEN="ghp_..."
# Run
ainews # AI news briefing
mynews # Malaysian news briefing
denews # Germany job market briefingCLI Usage
ainews # Full AI-summarized briefing
ainews -i # Interactive mode (ask follow-up questions)
ainews --raw # Raw data dump, no LLM
ainews --sources hn,github # Specific sources only
ainews --provider glm # Switch LLM (kimi/glm/gemini)
ainews --no-banner # Skip bannerInteractive Mode
After the briefing, you get a REPL for follow-up questions:
Command | What it does |
| Deep-dive into article #5 (fetches comments, page content) |
| Show all articles numbered |
| Search fetched articles |
| Deep research on ANY topic (searches the web) |
| Web news search for anything |
Any question | Ask the AI (auto-searches web if out of scope) |
| Exit |
MCP Server (for Devin / Claude Code / opencode)
Exposes 10 tools for programmatic access:
python -m src.mcp_server # stdio transportTool | Description |
| Latest AI news briefing |
| Search AI news by keyword |
| Fetch HN comments for a story |
| Fetch article text |
| Malaysian news briefing |
| Search Malaysian news |
| Germany SWE job market briefing |
| Search Germany job/visa topics |
| Web search for any topic |
| Multi-query deep research |
Configuration
Environment variables:
Variable | Purpose | Required? |
| LLM summarization via genai-nexus | Only for AI summaries |
| Higher GitHub API rate limits | Recommended |
LLM providers (via genai-nexus):
kimi— Kimi K2.5 (default)glm— GLM-5gemini— Gemini 2.5 Flash
Project Structure
src/
├── cli.py # ainews entry point
├── my_cli.py # mynews entry point
├── de_cli.py # denews entry point
├── interactive.py # Interactive REPL mode
├── mcp_server.py # MCP server (stdio)
├── summarizer.py # LLM summarization
├── details.py # Article deep-dive (comments, page text)
└── fetchers/
├── hackernews.py # Hacker News
├── reddit.py # Reddit AI subs
├── github_trending.py # GitHub trending + releases
├── arxiv.py # arXiv papers
├── rss_feeds.py # AI blog RSS feeds
├── web_search.py # Web search (Google News + DDG)
├── malaysian/ # Malaysian news fetchers
└── germany/ # Germany job market fetchersLicense
MIT — see LICENSE
Available Tools
8 toolsget_ai_newsA
Fetch the latest AI news from multiple sources.
Returns structured data from Hacker News, Reddit, GitHub (trending repos + releases from 26 AI orgs), arXiv papers, and AI blog RSS feeds. All fetched in parallel.
Use this when the user asks about AI news, what's new in AI, latest developments, trending topics, new models, new tools, etc.
Args: sources: Comma-separated list of sources to fetch. Options: hn, reddit, github, arxiv, rss max_items_per_source: Max items per source (default 15, max 30)
| Name | Required | Description | Default |
|---|---|---|---|
| sources | No | hn,reddit,github,arxiv,rss | |
| max_items_per_source | No |
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 discloses that all sources are fetched in parallel and that it returns structured data. It also mentions the max items per source limit. It does not mention potential rate limits or partial failures, but for a read-only fetch tool this is acceptable.
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 concise and well-structured: a one-sentence purpose, a sentence on output, a clear usage guidance sentence, and a bulleted Args section. No fluff or redundancy.
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 complexity of aggregating multiple sources and the existence of an output schema, the description covers the key aspects: what it returns, how to control sources and limits, and when to use it. It does not mention error handling or authentication, but these are not essential for this type of tool.
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 has no descriptions (0% coverage), so the description fully compensates. It explains 'sources' as a comma-separated list with allowed values and 'max_items_per_source' with default and max. This adds all needed semantics 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 clearly states it fetches the latest AI news from multiple named sources (Hacker News, Reddit, GitHub, arXiv, RSS). This distinguishes it from siblings like search_ai_news (search vs fetch) and other news tools for specific regions.
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 explicitly says 'Use this when the user asks about AI news, what's new in AI, latest developments, trending topics, new models, new tools, etc.' This provides clear trigger conditions. However, it does not mention alternative tools like search_ai_news for when a user wants to search specific terms, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_article_contentA
Fetch the text content of a web article or blog post.
Use this when the user wants to read or learn more about a specific article, blog post, or news story from the briefing.
Args: url: The URL of the article to fetch max_chars: Maximum characters of content to return (default 4000)
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| max_chars | No |
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 behavioral disclosure burden. It conveys a read-only fetch operation and mentions max_chars as a length limit, but does not describe error handling, truncation behavior, URL format constraints, or what happens for non-article pages. These are notable gaps though not fatal for a simple retrieval tool.
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 succinct, with a clear first sentence for purpose, a usage line, and a compact Args block. No filler or redundant details; it is well-structured for quick agent parsing.
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 two-parameter tool with an output schema, the description is mostly adequate but leaves ambiguities: it doesn't clarify whether any web URL is acceptable or only briefing-sourced articles, and it omits failure behavior. Given no annotations, this missing context prevents 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?
Schema description coverage is 0%, so the description must compensate. It provides one-line explanations for both parameters: 'URL of the article to fetch' and 'Maximum characters of content to return (default 4000)'. These add modest meaning beyond the raw schema but largely restate the parameter names and default.
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 opens with 'Fetch the text content of a web article or blog post', a specific verb-resource pair that clearly identifies the tool's function. It distinguishes itself from sibling news/search tools by implying URL-driven content retrieval rather than feed listing or searching.
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 states 'Use this when the user wants to read or learn more about a specific article, blog post, or news story from the briefing', which is a clear contextual trigger. It does not explicitly name alternatives or provide when-not conditions, but the context is sufficient for an agent to select this tool for content retrieval tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_germany_newsA
Fetch the latest Germany SWE job market and expat data.
Returns data from The Local Germany, DW, Deutschland.de, Reddit (r/germany, r/cscareerquestionsEU, r/expatsingermany, r/berlin, r/Munich), and Google News Germany (visa, Blue Card, Chancenkarte, tech hiring, layoffs).
Use this when the user asks about working in Germany, German tech jobs, visa/Blue Card news, Berlin/Munich tech scene, expat life in Germany, or Malaysian experiences in Germany.
Args: sources: Comma-separated sources: feeds, reddit, google max_items_per_source: Max items per source (default 15)
| Name | Required | Description | Default |
|---|---|---|---|
| sources | No | feeds,reddit,google | |
| max_items_per_source | No |
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 discloses the data sources (The Local Germany, DW, Deutschland.de, Reddit subreddits, Google News Germany) and the sectors covered (visa, Blue Card, tech hiring, layoffs). It does not mention rate limits, caching behavior, or what happens if a source fails, which are relevant for a news-aggregation tool. The absence of such caveats makes this adequate but not thorough.
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 well-structured: a clear purpose statement, followed by a list of sources/topics, then a usage condition, and finally an Args block. It is concise with no redundant statements, and the most critical information (verb + resource) is front-loaded. Every sentence earns its place.
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 output schema exists, return-value details are not needed. The description covers the tool's behavior (sources, topics), when to use it, and all parameter semantics. The only minor gap is the absence of any constraints or edge cases (e.g., whether sources can be empty, if max_items_per_source has a hard limit). Overall, an agent can invoke it correctly with the provided information.
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 0%, so the description is the only source of parameter meaning. It explicitly explains both parameters: 'sources: Comma-separated sources: feeds, reddit, google' and 'max_items_per_source: Max items per source (default 15)'. This gives allowed values and default behavior, fully compensating for the schema gap.
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 opens with a specific verb and resource: 'Fetch the latest Germany SWE job market and expat data.' It enumerates the exact source domains and topics, making it unambiguous and clearly distinct from siblings like get_ai_news or get_malaysian_news. The inclusion of 'Malaysian experiences in Germany' further narrows its niche, leaving no doubt about what it 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?
It gives explicit conditions: 'Use this when the user asks about working in Germany, German tech jobs, visa/Blue Card news, Berlin/Munich tech scene, expat life in Germany, or Malaysian experiences in Germany.' This is a clear positive trigger list. However, it does not mention alternatives or negative conditions (when not to use it), which would fully satisfy the 'when-not/alternatives' criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hn_discussionA
Fetch the Hacker News discussion comments for an article.
Use this when the user wants to know what people are saying about a specific Hacker News story, or wants more details/opinions on a topic.
Args: story_url: The HN discussion URL (https://news.ycombinator.com/item?id=...) or just the numeric ID max_comments: Maximum number of top-level comments to fetch (default 15)
| Name | Required | Description | Default |
|---|---|---|---|
| story_url | Yes | ||
| max_comments | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that it fetches top-level comments (with a max count) and accepts both a URL and a numeric ID. However, it does not mention potential error behavior, whether nested comments are included, or explicitly state it is read-only (though 'fetch' implies it). This is adequate but not rich.
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 concise and well-structured: a clear purpose statement, a usage line, and a parameter list. Every sentence contributes value, and the core purpose is front-loaded before the parameter details.
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 simple fetch tool with an output schema present (which presumably documents the return format), the description covers the main use cases and parameters. It might benefit from noting any API prerequisites or limitations regarding sub-comments, but overall it gives an agent enough to invoke the tool correctly.
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 has no descriptions (0% coverage), so the description is the sole provider of parameter meaning. It fully explains story_url as either the HN discussion URL or numeric ID, and max_comments as the number of top-level comments with a default of 15. This completely compensates for the missing schema details.
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 states a specific action (fetch) on a specific resource (Hacker News discussion comments for an article) and provides an example use case. It is clearly distinct from sibling tools, which are general news aggregators, so an agent can immediately tell what this 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 explicitly tells when to use it: when the user wants to know what people are saying about a specific Hacker News story or wants more details/opinions. It does not mention exclusions or alternatives, but the stated context is sufficient to choose this tool over the generic news tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_malaysian_newsA
Fetch the latest Malaysian news, gossip, and viral stories.
Returns data from Malaysian news sites (Malay Mail, FMT, World of Buzz, Rojak Daily, Coconuts KL, Cilisos, Soya Cincau, etc.), Reddit (r/malaysia, r/bolehland), and Google News Malaysia.
Use this when the user asks about Malaysian news, gossip, what's trending in Malaysia, netizen buzz, viral stories, Malaysian politics, KL news, etc.
Args: sources: Comma-separated sources: feeds, reddit, google max_items_per_source: Max items per source (default 15)
| Name | Required | Description | Default |
|---|---|---|---|
| sources | No | feeds,reddit,google | |
| max_items_per_source | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states it 'Returns data from...' which implies a read-only operation, and it lists sources, but it does not disclose any potential side effects, rate limits, or whether it modifies anything. The behavior is typical of a fetch tool and nothing contradicts the absence of annotations, but the disclosure is minimal and not richly detailed.
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 front-loaded with the main purpose, followed by source listing, usage guidance, and parameter details. It is concise—only a few lines—and every sentence contributes value. The structure is logical and easy to scan, earning a 4 rather than a 5 only because the parameter section could be slightly more compact.
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 has an output schema, so the description need not explain return values. It covers the two parameters, gives usage context, and lists sources. It does not mention edge cases like invalid source values or performance implications, but for a straightforward fetch tool with an output schema, the coverage is adequate. A 5 would require explicit mention of such edge cases or special conditions.
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 0%, so the description must compensate. It does so by explaining each parameter: 'sources: Comma-separated sources: feeds, reddit, google' and 'max_items_per_source: Max items per source (default 15)'. This adds real meaning beyond the raw schema, specifying valid values and the purpose of each parameter. It could further clarify default behavior or constraints, but it is effective.
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 opens with a clear verb and resource: 'Fetch the latest Malaysian news, gossip, and viral stories.' It specifies the scope (latest, trending) and lists concrete source categories, which makes the purpose unambiguous. However, it does not explicitly distinguish itself from the sibling search_malaysian_news, relying on the word 'latest' to imply a difference. That keeps it from a 5.
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?
It provides explicit guidance: 'Use this when the user asks about Malaysian news, gossip, what's trending in Malaysia, netizen buzz, viral stories, Malaysian politics, KL news, etc.' This clearly indicates when to invoke the tool. It does not mention alternatives or when not to use it, so it misses the full exclusion logic but gives solid context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ai_newsA
Search for specific AI topics across all news sources.
Fetches news and filters by keyword. Use this when the user asks about a specific topic (e.g., "any news about MCP?", "what's new with Claude?", "latest on open source models").
Args: query: Search keywords to filter results by (e.g., "MCP", "Claude", "open source") sources: Comma-separated sources to search
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| sources | No | hn,reddit,github,arxiv,rss |
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 must carry behavioral disclosure; it does state that it fetches news and filters by keyword. It does not describe result limits, pagination, source coverage behavior, or failure modes, but for a simple search tool the core behavior is reasonably clear.
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?
Purpose, usage guidance, and parameter documentation are compact and front-loaded. The first two sentences are slightly redundant, but the overall structure is efficient and easy to scan.
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?
An output schema exists, and the two parameters are simple and well explained in the description. The only notable gap is not differentiating from get_ai_news or explaining what happens when no sources are specified, but the defaults and examples cover most practical needs.
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 0%, so the description compensates well: it explains 'query' with multiple examples and defines 'sources' as comma-separated. It does not enumerate valid source values, but the schema default partially covers that.
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?
Clearly identifies a search action over AI news filtered by keyword, with concrete examples of topics. It is specific enough to be distinct from country/job search siblings, but it never explicitly differentiates itself from get_ai_news.
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?
Gives explicit when-to-use direction with example user queries like 'any news about MCP?' and 'latest on open source models.' However, it does not mention when not to use it or name sibling alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_germany_jobsA
Search Germany job market, visa, and expat topics.
Use when the user asks about specific topics like "Blue Card changes", "Berlin startups hiring", "Munich salary", "Malaysian in Germany", "Chancenkarte requirements", etc.
Args: query: Search keywords (e.g., "Blue Card", "Berlin startup", "salary") sources: Comma-separated sources to search
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| sources | No | feeds,reddit,google |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full behavioral burden. It fails to disclose what the tool actually returns, whether it performs live searches across feeds/reddit/google, if results are limited to German sources, or any caveats about coverage. The 'sources' mention hints at behavior but does not explain the full operational profile.
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 compact and front-loaded: purpose first, usage guidance second, then a brief structured Args block. The examples are helpful and not excessive, though the Args section could be slightly tighter.
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 simple search tool with an output schema, the description covers the core invocation need: topic area, sample queries, and parameter basics. It lacks explicit exclusions, alternative tool routing, or behavioral caveats, but it is minimally adequate given the low parameter count and available output schema.
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 0%, so the description must compensate for both parameters. It does add useful semantics: 'query' is illustrated with examples and 'sources' is described as comma-separated. However, it does not enumerate valid source values or explain how the default 'feeds,reddit,google' behaves, leaving some ambiguity.
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 states a specific verb ('Search') and a clear resource scope: 'Germany job market, visa, and expat topics.' Concrete examples like 'Blue Card changes' and 'Berlin startups hiring' make the tool's domain unmistakable and help distinguish it from siblings like get_germany_news or search_ai_news.
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 explicitly says 'Use when the user asks about specific topics like...' and supplies realistic query examples. It gives clear context for when to invoke the tool, though it does not explicitly state when not to use it or name direct alternatives among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_malaysian_newsA
Search for specific topics in Malaysian news.
Fetches Malaysian news and filters by keyword. Use when the user asks about specific Malaysian topics (e.g., "Anwar news", "ringgit", "Johor", "Malaysian food", "election").
Args: query: Search keywords (e.g., "Anwar", "ringgit", "election") sources: Comma-separated sources to search
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| sources | No | feeds,reddit,google |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says it 'Fetches Malaysian news and filters by keyword', which discloses the core behavior. However, since no annotations are provided, the description carries the full burden and does not mention output behavior, freshness, source restrictions, or potential no-result cases.
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 concise, front-loaded with the main purpose, and uses a short Args block to reinforce parameter semantics. Every sentence contributes useful information without redundancy.
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 only two parameters, one required, and an output schema present, the description covers the essentials well. It gives query examples and sources format, though an explicit note about when to prefer get_malaysian_news would make it fully complete.
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 0%, and the description compensates by explaining 'query' as search keywords with examples and 'sources' as comma-separated sources. It adds meaning beyond the bare schema titles, though it does not enumerate all possible source values.
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?
States a specific verb ('Search') and resource ('Malaysian news') with an explicit scope qualifier ('specific topics'). The 'Use when the user asks about specific Malaysian topics' framing distinguishes it clearly from the sibling 'get_malaysian_news', which implies the broader non-search fetch.
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?
Provides clear conditions for use with concrete examples ('Anwar news', 'ringgit', 'Johor'). It does not explicitly name alternatives or state when not to use this tool, so it lacks exclusions but still gives a usable trigger context.
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.
8 tool updates
v0.1.0- First observed
get_ai_news - First observed
get_article_content - First observed
get_germany_news - First observed
get_hn_discussion - First observed
get_malaysian_news - First observed
search_ai_news - First observed
search_germany_jobs - First observed
search_malaysian_news
TDQS
Scored across 8 tools
Most tools have clear get/search distinctions, but get_germany_news and search_germany_jobs overlap heavily—both cover Germany visa, job, and expat topics. The AI and Malaysia pairs are distinct, but this one boundary creates real misselection risk.
The get_/search_ verb pattern is mostly consistent, but search_germany_jobs breaks the get_<region>_news / search_<region>_news convention used elsewhere (search_malaysian_news, search_ai_news). get_hn_discussion and get_article_content also deviate, but their unique purposes justify it.
8 tools is a reasonable count, but the server name says 'ai-news' while three tools cover Malaysia and Germany news, making the scope broader than the name suggests. The Germany tools could potentially be consolidated, but the total is not excessive.
The set covers fetch and search workflows for each news domain, plus article content and HN discussion deep-dives. Minor gaps include lack of date filtering and a unified cross-source search, but core news consumption workflows are well supported.
Maintenance
Related MCP Connectors
Search GitHub, npm, PyPI, StackOverflow, ArXiv from one MCP — built for coding agents.
Web MCP: scrape/crawl sites, web search, brand assets, app stores, YouTube, Reddit, Hacker News.
Web search, scraping, RAG answers with citations, and translation as MCP tools.
Scrape, crawl and search the web for AI agents via MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides a suite of AI tools for web search, mathematical calculations, and tech news aggregation via MCP, leveraging Groq LLMs.1GPL 3.0
- FlicenseCqualityDmaintenanceEnables web search via Tavily API, dice rolling, and marketing/company news retrieval through MCP tools.4-
- FlicenseNot gradedqualityDmaintenanceLocal MCP server that ingests and normalizes recent AI, tech, and research news from multiple sources, exposing tools for media agents to query and retrieve article content on demand.-
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to access Hacker News data including stories, items, users, and comments via MCP tools.-