cablegram-mcp
Fetches and stores recent posts from Habr as a news source, making them searchable and retrievable through the cablegram tools.
Aggregates content from multiple RSS feeds as a source type, allowing the server to collect, search, and retrieve recent posts from those feeds.
Fetches and stores messages from public Telegram channels as a news source, supporting search and retrieval of recent dispatches.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cablegram-mcpWhat did Chinese and Russian sources say about OpenAI in the last 24 hours?"
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.
cablegram-mcp
Raw dispatches from tech, AI and Chinese/Russian sources — filtered by date, never ranked.
A cablegram was the unedited message that arrived over the submarine cables, before an editor turned it into a story. This server is the cable: it brings the dispatches. Your model is the editor.
The point is the cable, not the news. A launch discussed in Chinese or Russian today reaches English-language coverage days later, filtered through whoever decided it was worth translating — and often it never arrives at all. Nineteen sources in three languages, read directly, put a reader in California in the same week as a reader in Shanghai or Moscow.
Headlines are never translated. Each dispatch carries its language, and the model reading it has more context for that than any translation step would. It also means the same story is kept in every language that carried it: OpenAI titles a post "Pacing model development in an era of cyber-critical capabilities" while a Russian channel titles the same URL "OpenAI stopped RL for two weeks on its latest models". Both are stored against the same id, and either can be searched.
A full day of all nineteen costs a few thousand tokens. Six hours of them, grouped by source with the cuts declared, is around 700.
CABLEGRAM v0.1 | 2026-08-30T09:09Z..2026-08-30T14:09Z | 11 items | 19/19 sources
CUT habr=2/4 hn=2/159 kr36=2/3 (newest kept)
COLS id hh:mm title times UTC | body: wire_read(ids=[...])
---
## cls zh early,finance 1/1
-- 08-30
e60e27faa7fc 10:04 AI数据中心扩张“限制性因素”浮现 马斯克:SpaceX正铸造燃气轮机叶片
## data_secrets ru telegram 1/1
-- 08-30
a50d137e3147 10:49 Агенты OpenAI одну за одной автономно создали три цивилизации
## hn en community,searchable 2/159
-- 08-30
2929f114895f 14:06 METR and Redwood Offer Postmortem of the HuggingFace Hack (thezvi.wordpress.com)
7901d3fb4e1c 14:04 Google removed the URLs. Only for the people who resell them (scraping.club)Five hours of nineteen sources, verbatim. CUT says what was left out and how
much there was; 19/19 is how many answered.
Status
v0.1 — the nineteen sources work; the tool API may still move. All nineteen sources have an adapter and were verified against the live endpoints: eleven RSS feeds, Hacker News through its search index, a signed Chinese financial API, and six public Telegram channels.
Two of them are worth knowing about before you rely on them:
cls.cn is reverse-engineered. An undocumented internal API with a signed request. It holds 3.34 days at most and cannot page backwards, so a gap in polling is permanent.
wire_sourcesmarks itfragile.Telegram is HTML with no contract. The public preview view can change without a version number to notice it by.
Both are declared in the output rather than explained afterwards.
Related MCP server: NewsAgent Data MCP server
Install
Requires Python 3.12+. Nothing to clone:
uvx cablegram-mcp poll # fill the archive
uvx cablegram-mcp sources # see what it knows aboutRegister it with an MCP client — for Claude Code:
claude mcp add cablegram --scope user -- uvx cablegram-mcp serveOr from a checkout, if you would rather read it first:
git clone https://github.com/levongabrielyan/cablegram-mcp
cd cablegram-mcp && uv sync
claude mcp add cablegram --scope user -- \
/path/to/cablegram-mcp/.venv/bin/python -m cablegram.cli serveThen fill the archive, and keep filling it:
uvx cablegram-mcp poll # once, now
uvx cablegram-mcp sources # what it knows aboutFeeds expose a window of days, so put cablegram poll on a timer — an hour
nobody polls is an hour no endpoint will serve again. A systemd user unit is in
deploy/.
The four tools
Tool | Question |
| What did the sources publish in the last N hours? |
| Give me the stored text of these ids |
| When did this term start appearing? |
| What exists, and what is currently broken? |
All four are read-only and return plain text. The same information as JSON with indent costs roughly six times the tokens and truncates.
The local archive
RSS feeds expose only their last few dozen entries; last week is unrecoverable.
So everything fetched is stored in a SQLite file under your platform's data
directory (~/.local/share/cablegram/archive.db on Linux; override with
CABLEGRAM_DB).
It is created on first run and grows by a few megabytes a year. Nothing is uploaded anywhere, and no seed database ships with this repository — the server fetches on your behalf and does not redistribute anyone's content.
wire_search only reads what this archive holds, which starts the day you
first ran it. Zero hits means "not in what we can search", never "nobody is
talking about it", and the output says so on every reply.
Design
docs/design.md covers why the identity of an item is a pure
function of its URL, why a failure is a value rather than an exception, why the
full-text index needs a trigram tokenizer for Chinese to work at all, and what
this server deliberately does not do.
Notes
Only public endpoints are used: no credentials, no authentication bypass,
no scraping behind a login. Conditional requests (ETag, If-Modified-Since)
mean an unchanged feed is not re-downloaded. Intended for personal research —
respect each source's terms of service.
Licence
MIT. Built by Levon Gabrielyan.
Available Tools
4 toolswire_latestLatest dispatchesARead-only
What 19 tech/AI sources published in a time window, grouped by source, newest first within each. English, Chinese and Russian, untranslated. Filtered by DATE ONLY — never ranked, never scored. The order says nothing about importance. A source listed as DOWN means UNKNOWN, not 'nothing happened there'. A declared CUT (hn=25/57) means more exist in the window; raise limit_per_source or narrow the window. CROSS counts how many sources carried the same URL. It is arithmetic, not a ranking — but a story in six feeds across three languages within hours is the earliest signal this server can give you. detail='headlines' (the default) returns titles and ids; pass those ids to wire_read for the text. detail='full' includes each stored body inline and drops to 5 per source, because bodies are expensive — a teaser is marked as one, and is NOT the article.
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | ||
| since | No | ||
| detail | No | headlines | |
| sources | No | ||
| max_tokens | No | ||
| limit_per_source | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, it explains DOWN means unknown rather than no activity, CUT indicates truncation, CROSS is arithmetic and not a ranking, ordering is not importance, and teasers are marked and are not the article. This is exactly the behavioral nuance an agent needs.
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 dense but every sentence earns its place, with the core purpose front-loaded and caveats organized into digestible paragraphs. It avoids filler while covering crucial edge-case meaning.
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 an optional-parameter read tool with an output schema, it covers the domain caveats, the headline/full modes, language coverage, and how to proceed to wire_read. An agent can call it safely with defaults or with an informed detail/limit_per_source choice.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden. It explains detail values and the effect of raising limit_per_source, but it leaves hours, since, sources, and max_tokens to their schema properties with no added semantics beyond 'time window'.
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 opening states precisely what the tool returns: recent dispatches from 19 tech/AI sources in a time window, grouped by source and ordered newest-first within each. It also distinguishes itself by language scope and by positioning wire_read as the follow-up for article text.
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 clear usage context: this is a date-only, unranked view and the CROSS metric is an early-signal indicator, not a ranking. It names wire_read for the next step, though it does not explicitly contrast with wire_search or state when to choose wire_latest over it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wire_readRead dispatchesARead-only
The stored text of specific dispatches, by the ids wire_latest or wire_search returned. Read body=teaser literally: that feed ships a truncated excerpt, and the text you get is NOT the article. Do not draw conclusions from it — open the url or say the full text was not available. Ids not in the archive are named in the reply rather than dropped: re-run wire_latest or wire_search for the same window to get current ones.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description discloses two important behaviors: body=teaser is truncated and must not be used for conclusions, and missing IDs are named in the reply rather than silently dropped. No contradiction with annotations.
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?
Three sentences with no filler: first states the purpose, second delivers a critical caveat, third explains missing-ID behavior. Each sentence adds essential information and the most important usage guidance is front-loaded.
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 a simple one-parameter signature, an existing output schema, and annotations covering read-only behavior, the description covers all remaining ambiguity: how IDs are obtained, the teaser truncation trap, and recovery steps for stale IDs. Nothing important is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden for the 'ids' parameter. It explains that IDs come from wire_latest or wire_search and describes what happens when IDs are not in the archive, giving the agent enough context to supply valid 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?
The description states it retrieves stored text of specific dispatches by IDs returned from wire_latest or wire_search, which clearly identifies the operation and distinguishes it from the sibling list/search tools. The title 'Read dispatches' reinforces the verb and resource.
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 explicitly instructs the agent to supply IDs returned by wire_latest or wire_search, and advises re-running those tools if IDs are stale or missing. It also warns not to treat teaser text as the full article, providing clear contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wire_searchSearch the archiveARead-only
Search the archived headlines of every source that carried a story. IMPORTANT: this searches only what this server has archived since it was first run — not the whole internet and not the sources' own history. '0 hits' means 'not in what we can search'. It does NOT mean nobody is talking about it, and must never be reported as such. Chinese and Russian sources are indexed in their own language: a company is 智谱 here and Zhipu on Hacker News. If a query comes back empty, retry it transliterated or translated before concluding anything.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| query | Yes | ||
| sources | No | ||
| max_tokens | No | ||
| limit_per_source | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It goes beyond the readOnly/openWorld annotations by explaining that only the server's archive is searched, that '0 hits' does not mean absence in the world, and that Chinese/Russian content is indexed in its original language. It also tells the agent to retry transliterated or translated queries before concluding anything.
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, front-loaded with the core purpose, and uses a clear IMPORTANT warning for the most critical limitation. Every sentence adds necessary operational context without repetition.
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?
It fully covers the search scope and result interpretation, and the output schema covers return shape, but it omits parameter semantics and does not route the agent among sibling tools. For a 5-parameter search tool, this leaves some practical gaps.
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, but it only implies the meaning of 'query' through phrases like 'If a query comes back empty.' It never explains days, sources, max_tokens, or limit_per_source, leaving the agent to guess their behaviors and interactions.
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 opening sentence names a specific operation and resource: searching archived headlines across every source that carried a story. It clearly distinguishes archive search from a live feed, though it never names sibling tools explicitly.
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 gives no when-to-use versus alternative guidance; it does not mention wire_latest, wire_read, or wire_sources or state which tool to choose for current headlines or reading articles. The retry/transliteration advice is about query formulation, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wire_sourcesSources and healthARead-only
The catalogue and its health: which sources exist, their language and tags, when each last answered, and which are failing. Read this before concluding a topic is quiet. A source that has never been polled holds nothing, which is a different fact from a source that holds nothing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation read-only and open-world. The description adds valuable interpretive context: absence of data may mean a source was never polled, not that it is empty, and it surfaces failing sources. This goes beyond what the annotations alone convey.
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?
Two sentences with no filler. The first sentence front-loads the catalogue and health facts; the second adds a concise, important usage caution. 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?
For a zero-parameter read-only tool with an output schema and open-world annotation, the description fully covers why an agent would invoke it and how to interpret one of its key signals. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline for this dimension is 4. There is no parameter ambiguity for the description to resolve, and no additional parameter meaning is needed.
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?
Describes the resource ('the catalogue and its health') and the specific facts it exposes: which sources exist, language, tags, last-answered time, and failing status. It is distinguishable from content-focused siblings like wire_read or wire_search, though it lacks an explicit action verb such as 'list' or 'retrieve'.
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 an explicit use case: 'Read this before concluding a topic is quiet.' It also warns about the distinct meaning of a never-polled source versus one with no content. It does not name alternatives or state when not to use the tool, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct role: browsing by time window, searching archived headlines, reading stored dispatches, and checking source health. The overlap between wire_latest and wire_search is resolved by their descriptions (chronological feed vs archive query).
All names share the wire_ prefix and use lowercase snake_case, so the set feels predictable and cohesive. The second element is not consistently a verb or noun (latest, read, search, sources), but the pattern is still clear enough to be navigated without confusion.
Four tools is well-scoped for a read-only news/archive monitoring server. Each tool earns its place and there is no bloat.
The server covers its apparent workflow completely: discover via latest or search, retrieve via read, and assess archive coverage/health via sources. The descriptions also explicitly address edge cases like teasers and unindexed queries, leaving no dead ends in normal use.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
The only News based AI MCP your agents will ever need — custom categories, global regions, and time-scoped results in one tool. We use multi-vector & sparse-hybrid search to search through thousands of articles across the world to find the exact news you're looking for.
Intelligence subscription protocol for AI agents. Scored, filtered AI intelligence signals via MCP.
Enrich, search, assess, and manage threat intelligence through 80+ typed MCP tools.
Real-time digital asset narrative intelligence from 1,000+ curated media sources.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceRead-only MCP server for monitoring public RSS and Atom feeds from competitor and industry websites, enabling competitive intelligence workflows through feed fetching, searching, and thematic summarization.
- AlicenseAqualityBmaintenanceEnables querying scored and classified Russian and English news via MCP clients, offering filtered feeds, keyword search, breaking news, and coverage stats.51MIT
- FlicenseAqualityDmaintenanceMCP server that provides access to 14 OSINT data sources including government, research, corporate, and news APIs, enabling search, preview, and retrieval of public intelligence data.4
- FlicenseNot gradedqualityBmaintenanceEnables querying and analyzing changes in technology company documentation through MCP tools, including change feeds, company info, and evidence-based messaging.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/levongabrielyan/cablegram-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server