Skip to main content
Glama
masterries

SIP News MCP

by masterries

SIP News MCP Server for Luxembourg Government News

An MCP connector that lets an AI assistant search and read the official news of the Luxembourg government press service (Service information et presse, SIP) at sip.gouvernement.lu.

It exposes the full SIP news archive (press releases, communiqués, speeches, state visits, ministerial news, ~2300 items back to February 2000) as clean, structured, full-text-searchable data, in German, French or English.

Why it exists

The SIP news page loads its list through a JavaScript component, so a naive HTTP fetch returns an empty shell. This connector instead uses the site's own RSS endpoints, which return clean, paginated, newest-first data:

Purpose

Endpoint

Browse all news

GET /{lang}/actualites.rss?page={n}

Full-text search

GET /{lang}/support/recherche.rss?q={query}&page={n}

Each page returns 50 items as a sliding window over the whole archive. The connector pages through automatically, de-duplicates, decodes the (double-encoded) entities, recovers each item's category/language/date from its URL, and can fetch the full article body on demand.

Related MCP server: AllNewsAPI MCP

Tools

Tool

What it does

search_news

Keyword full-text search across the whole archive (newest first).

semantic_search

Meaning-based (vector) search; handles natural-language questions.

browse_latest_news

The chronological news feed, newest first.

get_article

Fetch the full, cleaned text of one article by URL.

list_categories

Reference list of category keys and interface languages.

build_semantic_index

(Re)build the local vector index used by semantic_search.

semantic_index_status

Size and coverage of the vector index.

Common parameters:

  • languagede, fr or en (interface language; many items are in French regardless, so try more than one if needed).

  • limit — how many results to return; larger values page deeper into history.

  • since / untilYYYY-MM-DD date bounds.

  • category — e.g. communiques (press releases), articles, discours (speeches); see list_categories.

Returned fields per item: title, summary, url, published (ISO), published_human, category, category_label, content_language, source.

search_news / browse_latest_news also return count, complete and an optional note. complete: false means the scan stopped at the page cap or time budget rather than covering the whole archive/range, so a short or empty list there is not an authoritative "nothing exists" (the note explains how to narrow the query). get_article returns the body and a truncated flag.

semantic_search matches news by meaning rather than exact keywords, so it answers natural-language questions ("military cooperation with Belgium", "attacks on state IT systems") even when the wording differs from the article.

How it works:

  • build_semantic_index pages through the archive, embeds each item (title + summary) with an embedding model, and stores the vectors in the configured vector store (ChromaDB by default). For NVIDIA retrieval models on OpenRouter, documents are embedded as passage and queries as query (asymmetric retrieval), which sharply improves ranking.

  • semantic_search embeds the question and returns the nearest items by cosine similarity, with the same language / category / since / until filters. Each result carries a similarity score in [0, 1].

Setup:

  1. Get an OpenRouter API key and put it in the server's environment as OPENROUTER_API_KEY (see the config below). The default model nvidia/llama-nemotron-embed-vl-1b-v2:free is free. (Or use a local embedder instead, see below.)

  2. Build the index once (from Claude, call build_semantic_index, or run the one-liner below). A full build covers the whole archive (~2300 items, back to

    1. in about a minute. Re-run it periodically to pick up new news.

uv run --extra semantic python -c "import asyncio; from sip_news_mcp.semantic import SemanticIndex; print(asyncio.run(SemanticIndex().build(language='fr', max_items=3000)))"

Relevant environment variables:

Variable

Purpose

SIP_NEWS_SEMANTIC

on / off / auto (default auto). Turn semantic search off for a keyword-only server.

OPENROUTER_API_KEY

Embedding API key (only for the default OpenRouter provider).

SIP_NEWS_EMBED_MODEL

Embedding model id (default: the free Nemotron model).

SIP_NEWS_EMBED_BASE_URL

Embedding API base; point at a local server for self-hosted embeddings.

SIP_NEWS_EMBED_API_KEY

Embedding key (falls back to OPENROUTER_API_KEY).

SIP_NEWS_EMBED_INPUT_TYPE

on / off / auto asymmetric retrieval (default auto).

SIP_NEWS_VECTOR_BACKEND

chroma (default) or qdrant.

SIP_NEWS_CHROMA_DIR

Chroma index location; local disk only (default under %LOCALAPPDATA%).

See .env.example.

Local / self-hosted embeddings (Ollama, OpenAI-compatible)

Point SIP_NEWS_EMBED_BASE_URL at any OpenAI-compatible /embeddings server (Ollama, vLLM, LocalAI, text-embeddings-inference, ...). No OpenRouter key is needed. For example, with Ollama (ollama pull nomic-embed-text):

SIP_NEWS_EMBED_BASE_URL=http://localhost:11434/v1
SIP_NEWS_EMBED_MODEL=nomic-embed-text
# no key; input_type is auto-disabled for non-OpenRouter endpoints

Then build the index. (Changing the embedding model/endpoint changes the vector space, so rebuild the index with refresh=true when you switch.)

Keyword-only mode (no RAG, easiest to deploy)

Semantic search is optional. With SIP_NEWS_SEMANTIC=off (or simply by not installing a vector backend), the server exposes only the four keyword tools (search_news, browse_latest_news, get_article, list_categories). No vector database, no embeddings, no OpenRouter key, and none of the heavy optional dependencies are needed, which makes it the simplest thing to deploy.

The vector-DB dependencies are optional extras, so the base install is lightweight:

Install

What you get

pip install .

Keyword-only (no vector deps).

pip install ".[chroma]"

+ embedded ChromaDB backend.

pip install ".[qdrant]"

+ Qdrant backend.

pip install ".[semantic]"

+ both backends.

With SIP_NEWS_SEMANTIC=auto (the default) the server enables semantic search only when the configured backend's library is actually installed.

Requirements

  • uv (recommended), or Python 3.10+ with pip.

uv will download a suitable Python automatically; you do not need one installed system-wide.

Note (Windows + network drives). If you keep this project on a network / UNC drive, Python's Windows extensions (pywin32, pulled in by mcp) cannot load their DLLs from a UNC path, so the virtual environment must sit on a local disk. Point UV_PROJECT_ENVIRONMENT at a local folder (the project code can stay on the network drive; only the installed environment needs to be local). The commands and MCP config below set it.

Quick start

cd C:\path\to\SIP-MCP-Connector
$env:UV_PROJECT_ENVIRONMENT = "$env:LOCALAPPDATA\sip-news-mcp\venv"
uv sync --extra semantic --extra dev    # LOCAL env with semantic + test deps
uv run --extra dev pytest               # run the offline test suite
uv run --extra semantic sip-news-mcp    # start the server (stdio, with semantic)
# For a keyword-only server, drop the extras:  uv run sip-news-mcp

A quick live check without an MCP client (run in the same shell, so it reuses the local environment set above):

uv run python -c "import asyncio; from sip_news_mcp.client import SipNewsClient; print(asyncio.run(SipNewsClient().search('cyber', language='de', limit=3)))"

Use it from Claude

Claude Desktop

Add this to claude_desktop_config.json (%APPDATA%\Claude\claude_desktop_config.json on Windows), then restart Claude Desktop. See examples/claude_desktop_config.json:

{
  "mcpServers": {
    "sip-news": {
      "command": "uv",
      "args": ["--directory", "C:\\path\\to\\SIP-MCP-Connector", "run", "--extra", "semantic", "sip-news-mcp"],
      "env": {
        "UV_PROJECT_ENVIRONMENT": "C:\\sip-news-mcp\\venv",
        "OPENROUTER_API_KEY": "sk-or-v1-...your key...",
        "SIP_NEWS_CHROMA_DIR": "C:\\sip-news-mcp\\chroma"
      }
    }
  }
}

(--extra semantic and the OPENROUTER_API_KEY / SIP_NEWS_CHROMA_DIR env are only needed for semantic search; for a keyword-only server drop them. If Claude Desktop cannot find uv, use the absolute path to uv.exe, since it may not inherit your shell PATH.)

Claude Code (CLI)

claude mcp add sip-news `
  --env UV_PROJECT_ENVIRONMENT="$env:LOCALAPPDATA\sip-news-mcp\venv" `
  --env OPENROUTER_API_KEY="sk-or-v1-...your key..." `
  -- uv --directory "C:\path\to\SIP-MCP-Connector" run --extra semantic sip-news-mcp

Example prompts

  • "Search SIP for news about cybersécurité in 2025 and summarise the top 5."

  • "List all SIP press releases (communiques) since 2026-01-01."

  • "Find SIP articles mentioning armée and open the most recent one in full."

Notes and limits

  • Search uses the SIP site's own full-text engine, which is a broad match: a hit may mention the term only in its body, and ranking is the site's, not ours. The connector returns those results faithfully. Use get_article to confirm relevance before quoting.

  • Content language varies per item; the connector reports content_language per result so you can tell French items from German ones.

  • Date filtering is most efficient for recent ranges (the feed is newest-first and stops early once it passes since); very old ranges page deeper and may hit the page cap or the ~45s time budget, in which case the result is marked complete: false with an explanatory note.

  • Identical requests are cached in-process for 5 minutes (bounded LRU), so repeating the same query does not re-hit the server. A single search/browse call still issues up to ~40 sequential page requests, but they are made one at a time (each awaited before the next) under a descriptive User-Agent, which keeps load on the public government server modest.

  • get_article only fetches https URLs on sip.gouvernement.lu (host is parsed and checked, not substring-matched), so it cannot be turned into a request to other hosts.

  • This connector only reads public pages; it performs no writes and needs no credentials.

Deployment (Docker / Kubernetes)

The server speaks two transports, chosen by MCP_TRANSPORT:

  • stdio (default) for Claude Desktop / Code (local subprocess).

  • http (streamable-http) for containers and Kubernetes, listening on MCP_HOST:MCP_PORT (default 0.0.0.0:8000, path /mcp).

It also supports two vector backends via SIP_NEWS_VECTOR_BACKEND:

  • chroma (embedded, default) for local use.

  • qdrant (a shared, network Qdrant) for containers / multiple replicas, set with QDRANT_URL (and optional QDRANT_API_KEY).

Docker Compose

Brings up Qdrant + the MCP server (HTTP) together:

echo "OPENROUTER_API_KEY=sk-or-v1-...your key..." > .env
docker compose up -d --build
docker compose run --rm index-build      # populate the vector index once
# MCP server: http://localhost:8000/mcp   (streamable-http)

Minimal / keyword-only (no RAG)

The simplest deployment: no Qdrant, no embeddings, no API key. Just the four keyword tools.

docker compose -f docker-compose.minimal.yml up -d --build
# MCP server on http://localhost:8000/mcp

The minimal image is built with no vector-DB dependencies (docker build --build-arg EXTRAS="" -t sip-news-mcp:minimal .) and runs with SIP_NEWS_SEMANTIC=off.

Docker (image only)

docker build -t sip-news-mcp:latest .                 # full (RAG) image
docker run --rm -p 8000:8000 \
  -e OPENROUTER_API_KEY=sk-or-v1-... \
  -e SIP_NEWS_VECTOR_BACKEND=qdrant -e QDRANT_URL=http://host.docker.internal:6333 \
  sip-news-mcp:latest

Kubernetes (Helm)

The chart in deploy/helm/sip-news-mcp deploys the server, a bundled Qdrant (StatefulSet + PVC), a Secret for the API key, and an optional one-shot Job that builds the index after install.

helm install sip-news deploy/helm/sip-news-mcp \
  --set openrouter.apiKey=sk-or-v1-...your key...
# or reference an existing Secret:  --set openrouter.existingSecret=my-secret

For a keyword-only deployment (just a Deployment + Service, no Qdrant, Secret or Job), set semantic.enabled=false:

helm install sip-news deploy/helm/sip-news-mcp --set semantic.enabled=false

Key values (see values.yaml):

Value

Default

Purpose

semantic.enabled

true

Set false for a keyword-only server (no Qdrant/key/Job).

vector.backend

qdrant

qdrant or chroma.

qdrant.enabled

true

Deploy a bundled Qdrant; set false + qdrant.url for an external one.

openrouter.apiKey

""

API key (creates a Secret), or use existingSecret.

indexBuild.enabled

true

Run a post-install Job to populate the index (qdrant backend).

ingress.enabled

false

Expose via an Ingress.

replicaCount

1

Scale out (qdrant backend; keep 1 for chroma).

Reach it with kubectl port-forward svc/sip-news-... 8000:8000, then point an MCP client at http://localhost:8000/mcp.

Connecting an MCP client over HTTP

Claude Desktop's config is stdio-only; to use the HTTP server, configure an MCP client that supports the streamable-http transport with URL http://<host>:8000/mcp.

Project layout

src/sip_news_mcp/
  client.py       HTTP client, RSS/article parsers, filtering, pagination
  semantic.py     OpenRouter embeddings + the SemanticIndex
  vectorstore.py  pluggable vector backends (ChromaDB / Qdrant)
  build_index.py  `sip-news-index` CLI (one-shot index build, used by jobs)
  server.py       FastMCP server, tool definitions, stdio/http transport
  __main__.py     `python -m sip_news_mcp`
tests/
  test_urls.py          URL / host / selector-metadata tests
  test_parsing.py       RSS feed + article parser tests
  test_client.py        SipNewsClient pagination / filtering tests
  test_semantic.py      vector layer tests (fake embedder)
  test_server_config.py semantic on/off/auto config logic
  test_server_tools.py  MCP tool registration / integration (each tool >=2x)
  conftest.py           shared fixtures; fixtures/ captured live responses
Dockerfile          container image (HTTP transport)
docker-compose.yml  Qdrant + MCP server + one-shot index build
deploy/helm/sip-news-mcp/   Kubernetes Helm chart
examples/
  claude_desktop_config.json

Available Tools

7 tools
browse_latest_newsA

Browse the latest SIP news, newest first (no search query needed).

This is the chronological feed of everything the press service publishes.
Combine with `since`/`until` to get all news in a date range, or with
`category` to follow only press releases, speeches, etc.
ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoInterface language: de, fr or en.de
limitNoMaximum number of items (1-200).
sinceNoOnly items on/after this date (YYYY-MM-DD).
untilNoOnly items on/before this date (YYYY-MM-DD).
categoryNoRestrict to a category key (see list_categories).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description discloses key behavioral traits: the feed is chronological and newest first, and it is a contextual browse (no search required). It does not mention pagination or authentication, but these are standard for a read-only list tool and 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the primary purpose, followed by usage details. Every sentence adds value without redundancy or wordiness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity, full parameter coverage, and presence of an output schema, the description is complete. It covers the main use case, suggests parameter combinations, and references a sibling tool (list_categories) for further context.

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?

The schema covers all parameters with clear descriptions (e.g., language de/fr/en, limit 1-200, since/until format, category referencing list_categories). The description adds value by emphasizing the chronological nature and the 'no search query' point, and by recommending combination with other parameters.

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 the purpose: 'Browse the latest SIP news, newest first (no search query needed).' It specifies the verb (browse), resource (SIP news), and ordering, distinguishing it from sibling tool 'search_news' which requires a query.

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 advises to combine with 'since'/'until' for date ranges and 'category' for filtering, providing clear usage patterns. It also states no search query is needed, but does not explicitly exclude cases where search_news would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

build_semantic_indexA

Build or update the local vector index that powers semantic_search.

Pages through the most recent SIP news, embeds each item (title + summary)
via OpenRouter, and stores the vectors in a local ChromaDB collection. Safe
to run repeatedly: by default it only embeds items not already indexed. Run
it once before using semantic_search, and again periodically to pick up new
news. This call fetches from SIP and the embedding API, so it can take a
little while for large `max_items`.
ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoInterface language to pull news from: de, fr or en.de
max_itemsNoHow many recent items to (re)index (1-2000).
refreshNoRe-embed items already in the index instead of skipping them.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/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 full burden. It discloses that the tool pages through SIP news, embeds via OpenRouter, stores vectors in ChromaDB, is safe to run repeatedly (only indexes new items by default), and that it can take time for large max_items. This covers key behavioral traits.

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 (four sentences) and front-loaded with the primary purpose. Every sentence adds value: purpose, process, safety/repeatability, and performance characteristic. No redundancy or fluff.

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 tool's complexity (external API calls, indexing process), the description explains the essential steps and context. The existence of an output schema (not shown but indicated) means return values are documented elsewhere. The description is sufficiently complete for an agent to understand when and how to use the tool.

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 coverage is 100%, so baseline is 3. The description does not add meaning beyond the schema for parameters: language, max_items, refresh. The schema itself already describes them clearly. The description provides context about how they are used in the process, but no new semantic 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 clearly states the tool's purpose: 'Build or update the local vector index that powers semantic_search.' It uses specific verbs (build/update) and identifies the resource (local vector index). This distinctly differentiates it from sibling tools like browse_latest_news, get_article, or semantic_search.

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 provides explicit usage guidance: 'Run it once before using semantic_search, and again periodically to pick up new news.' It also notes the tool is safe to run repeatedly and describes default behavior. While it does not mention alternatives or when not to use it, the guidance is clear and context-specific.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_articleA

Fetch and return the full, cleaned text of a single SIP article.

Returns the title, an optional summary, the body text (whitespace cleaned, markup removed), a word count, the category and the content language.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe article URL returned by search_news or browse_latest_news.
max_charsNoMaximum characters of body text to return (truncated cleanly).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/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 transparently describes the returned fields (title, summary, body, word count, category, language) and processing details (whitespace cleaned, markup removed). It also mentions truncation behavior via max_chars. No destructive actions are implied, so this is adequate.

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 front-loaded. Two sentences: one states the purpose, the other lists returned fields. No wasted words, no redundancy with the schema.

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 that an output schema exists (not shown but indicated), the description need not detail return types. It covers the main return fields and the max_chars parameter behavior. It could mention error handling (e.g., invalid URL) but overall it's fairly complete for a straightforward fetch tool.

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 100%, so the schema already documents both parameters. The description adds minimal context: 'url' should come from search_news/browse_latest_news, and 'max_chars' has default 8000, max 40000, min 200, and truncates cleanly. This adds some value but is not essential 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 'Fetch and return the full, cleaned text of a single SIP article.' It uses specific verbs (fetch, return) and resource (single SIP article), and distinguishes it from sibling tools like search_news and browse_latest_news which are for finding articles, not retrieving full content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage after finding an article via search_news or browse_latest_news, but it does not explicitly state when to use it vs. alternatives, nor does it provide when-not-to-use guidance or mention prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_categoriesA

List the content categories and interface languages understood by the SIP site.

Use the returned category keys with the `category` parameter of
search_news / browse_latest_news.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It transparently describes the tool as a listing operation with no side effects. While it omits details like data freshness or authorization, for a simple read-only tool with no parameters the description is sufficiently transparent.

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 with two sentences, front-loading the purpose and immediately providing usage guidance. Every sentence adds value without extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (no parameters) and the presence of an output schema, the description completely covers what the tool does and how the output should be used with sibling tools, making it fully actionable for an AI agent.

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?

The tool has zero parameters, so the baseline score is 4. The description does not need to add parameter semantics, but it does provide context on the output's usage, which adds value beyond the empty 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 that the tool lists content categories and interface languages, using specific verb ('List') and resource ('content categories and interface languages'). It further distinguishes itself by explaining how the output is used with sibling tools search_news and browse_latest_news.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs the agent to use the returned category keys with the `category` parameter of search_news / browse_latest_news, providing clear context on when to use this tool—essentially a prerequisite step for those tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_newsA

Full-text search across the entire SIP news archive (back to ~2012).

Results are returned newest-first. Each result has a title, a short
summary, the publication date, the content language, the category and a
URL. Use get_article on a URL to read the full text.

The connector pages through the site automatically until it has `limit`
matching items or the archive is exhausted, so a larger `limit` simply
digs deeper into history.
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesWords or phrase to search for, e.g. 'cybersécurité' or 'défense'.
languageNoInterface language: de, fr or en.de
limitNoMaximum number of results (1-200).
sinceNoOnly items on/after this date (YYYY-MM-DD).
untilNoOnly items on/before this date (YYYY-MM-DD).
categoryNoRestrict to a category key (see list_categories), e.g. 'communiques'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses key behaviors: results are newest-first, automatic pagination until limit or archive exhausted, and each result includes title, summary, date, language, category, and URL. No destructive or rate-limiting details are needed, as it's a read-only search tool. The description is transparent and accurate.

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 two short paragraphs, no fluff. First paragraph explains purpose and result fields, second explains pagination. Every sentence adds value, and the structure is logical and front-loaded with the key purpose.

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 and full schema documentation, the description is nearly complete. It covers search scope, ordering, result fields, pagination, and cross-reference to get_article. One minor gap: it doesn't specify whether the search includes article bodies or just titles, but 'full-text search' implies body content. Otherwise, comprehensive.

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 coverage is 100%, so baseline is 3. The description adds some extra context: for 'query' it provides examples, for 'limit' it explains that larger values dig deeper into history. However, most parameter descriptions in the schema are already clear, and the description does not significantly enhance understanding beyond what is already in 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 performs full-text search across the SIP news archive, with a specific verb ('search'), resource ('news archive'), and scope ('back to ~2012'). It distinguishes itself from siblings like browse_latest_news (browsing without search) and get_article (retrieving full text).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides general guidance (results newest-first, pagination behavior) and cross-references get_article for full text, but it does not explicitly state when to use this tool versus alternatives like browse_latest_news or semantic_search. No 'when not to use' or direct comparison with siblings is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

semantic_index_statusA

Report the size and coverage of the semantic (vector) index.

Returns how many items are indexed, the date range and content languages covered, the embedding model, the on-disk location, and whether an OpenRouter API key is configured.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must disclose behavioral traits. It states what the tool returns but does not mention that it is read-only, has no side effects, or any rate limits/permissions required.

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?

Two sentences: first establishes the core action, second lists details. No fluff, front-loaded, easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given output schema exists, description does not need to detail return structure. Already lists key outputs comprehensively. Tool is simple (no params), so description is 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?

No parameters exist, schema coverage is 100%. Description adds no parameter info because none needed, but it is not a deficiency. Baseline for 0 params is 4.

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?

Clearly states it reports the size/coverage of the semantic index. Lists specific outputs (items indexed, date range, languages, model, location, API key status). Differentiates from sibling 'build_semantic_index' which is about building, not status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies checking status, and the sibling 'build_semantic_index' suggests the alternative. However, there is no explicit guidance on when to use this vs other tools (e.g., checking before building).

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.

  1. 7 tool updatesv0.1.0
    • First observedbrowse_latest_news
    • First observedbuild_semantic_index
    • First observedget_article
    • First observedlist_categories
    • First observedsearch_news
    • First observedsemantic_index_status
    • First observedsemantic_search

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: browsing chronological feed, keyword search, semantic search, fetching articles, listing categories, and index management are all well-separated. Descriptions explicitly clarify differences (e.g., search vs. semantic_search).

Naming Consistency3/5

Most tool names follow a verb_noun snake_case pattern (browse_latest_news, get_article, list_categories, search_news, build_semantic_index). However, 'semantic_index_status' and 'semantic_search' are noun phrases without a verb, breaking the pattern and introducing inconsistency.

Tool Count5/5

With 7 tools, the server is well-scoped. It covers all core functionalities for a news archive (browsing, searching, retrieving, and managing the semantic index) without unnecessary bloat.

Completeness4/5

The tool surface is nearly complete for a read-only news server: both chronological and full-text search, plus semantic search, article retrieval, and index management. A minor gap is the lack of a dedicated 'get_article_by_id' tool, but URLs serve as identifiers.

Maintenance

ActivityStale
ResponsivenessSyncing

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to search for news articles, get top headlines, and access comprehensive news data with advanced filtering options through AllNewsAPI.
    1
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server exposing AFP news content as tools for AI assistants, enabling article search, retrieval, and analysis via natural language.
    475
    5
    ISC

Latest Blog Posts

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/masterries/SIP-MCP-Connector'

If you have feedback or need assistance with the MCP directory API, please join our Discord server