Skip to main content
Glama

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

ainews

AI News

Hacker News, Reddit (9 AI subs), GitHub trending + releases (26 AI orgs), arXiv, 11 AI blog RSS feeds

mynews

Malaysian News

Malay Mail, FMT, World of Buzz, Rojak Daily, Coconuts KL, Cilisos, Soya Cincau, Reddit r/malaysia, Google News MY

denews

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 briefing

CLI 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 banner

Interactive Mode

After the briefing, you get a REPL for follow-up questions:

Command

What it does

#5 or article 5

Deep-dive into article #5 (fetches comments, page content)

list

Show all articles numbered

search <term>

Search fetched articles

/deep <topic>

Deep research on ANY topic (searches the web)

/web <query>

Web news search for anything

Any question

Ask the AI (auto-searches web if out of scope)

quit

Exit

MCP Server (for Devin / Claude Code / opencode)

Exposes 10 tools for programmatic access:

python -m src.mcp_server    # stdio transport

Tool

Description

get_ai_news

Latest AI news briefing

search_ai_news

Search AI news by keyword

get_hn_discussion

Fetch HN comments for a story

get_article_content

Fetch article text

get_malaysian_news

Malaysian news briefing

search_malaysian_news

Search Malaysian news

get_germany_news

Germany SWE job market briefing

search_germany_jobs

Search Germany job/visa topics

web_search_news

Web search for any topic

deep_research_topic

Multi-query deep research

Configuration

Environment variables:

Variable

Purpose

Required?

NEXUS_API_KEY

LLM summarization via genai-nexus

Only for AI summaries

GITHUB_PAT_TOKEN

Higher GitHub API rate limits

Recommended

LLM providers (via genai-nexus):

  • kimi — Kimi K2.5 (default)

  • glm — GLM-5

  • gemini — 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 fetchers

License

MIT — see LICENSE

Available Tools

8 tools
get_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)

ParametersJSON Schema
NameRequiredDescriptionDefault
sourcesNohn,reddit,github,arxiv,rss
max_items_per_sourceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
sourcesNofeeds,reddit,google
max_items_per_sourceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
story_urlYes
max_commentsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
sourcesNofeeds,reddit,google
max_items_per_sourceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
sourcesNohn,reddit,github,arxiv,rss

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
sourcesNofeeds,reddit,google

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
sourcesNofeeds,reddit,google

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 8 tool updatesv0.1.0
    • First observedget_ai_news
    • First observedget_article_content
    • First observedget_germany_news
    • First observedget_hn_discussion
    • First observedget_malaysian_news
    • First observedsearch_ai_news
    • First observedsearch_germany_jobs
    • First observedsearch_malaysian_news

TDQS

A3.9/5.0

Scored across 8 tools

Disambiguation3/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides a suite of AI tools for web search, mathematical calculations, and tech news aggregation via MCP, leveraging Groq LLMs.
    1
    GPL 3.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    Local 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.
    -