Made by Desearch (desearch.ai).
This article summarizer is for marketers, founders and writers who need the gist of a long article for a post, a newsletter or a team update. Paste a link into Claude or Cursor with one saved prompt, and you get the main points in plain words plus each figure from the article with its sentence quoted. Your assistant works only from the text Desearch read from the page, so you can check the numbers before you publish.
The problem
You found a long article and need the key points and the exact numbers fast. Reading it closely takes time, and copying figures by hand is where mistakes slip in. Asking an assistant to summarize a link is quick, but you cannot see which text it read, so you cannot tell whether a number came from the article. You want a summary you can trace back to the page.
What the app does
- Takes one public article link.
- Reads the page as plain text with the Desearch
extracttool (format: "text",js: false). If the page comes back with no content, it tries once more. - Stops when the text is under 150 words, such as a login page, instead of guessing.
- With the saved prompt, gives the topic in one line and 5 main points in plain words, taken from that text only.
- With the script, prints the opening sentence plus the 4 sentences that share the most words with the rest of the article, quoted as written, with no rewriting.
- Lists the sentences that carry figures written as digits (amounts, percentages, counts). Bare years are skipped. The script keeps up to 8 of those sentences.
- Optionally finds other pages with the Desearch
ai-searchtool. The script shows up to 3 links from other sites. The saved prompt asks for up to 2.
How it works
- Read the page. Your assistant, or the script, calls the
extracttool on the hosted Desearch MCP server (https://mcp.desearch.ai/mcp) withformat: "text"andjs: false. - Check there is enough text. Under 150 words, the saved prompt says "Desearch could not read enough of this page to summarize it" and stops. The script says the page came back nearly empty and does not summarize it.
- Summarize from that text only. The saved prompt asks for 5 bullets and a "Numbers mentioned" list, with no facts, numbers or names that are not in the text. The script only picks sentences. It does not rewrite them.
- Find other coverage (optional).
ai-searchwithtools: ["web"]andresult_type: "ONLY_LINKS", using words from the link. The script then shows up to 3 links from other sites.
The code
No code is needed for the saved prompt. For people who want a script, the key is read from a file only (~/.desearch-api-key, or --key-file PATH). read_key in article_summarizer.py (lines 34 to 40):
def read_key(path):
"""Read the API key from a file (never from the environment)."""
with open(path) as f:
key = f.read().strip()
if not key:
raise ValueError(f"key file {path} is empty")
return keyThe extract and related-search arguments, from the same file (lines 57 to 59 and 72 to 77):
def build_extract_args(url):
"""MCP extract arguments: plain text, no JavaScript rendering."""
return {"url": check_url(url), "format": "text", "js": False}def build_related_args(title):
"""ai-search arguments to find other pages on the same story. No domain filters."""
t = " ".join((title or "").split())
if not t:
raise ValueError("title is empty")
return {"prompt": f"news and articles about: {t}", "tools": ["web"], "result_type": "ONLY_LINKS"}The MCP call, from the same file (lines 234 to 248):
async def call_tools(calls, key):
"""Run [(tool, args), ...] in one MCP session; return raw content lists."""
from mcp import ClientSession
from mcp.client.streamable_http import streamable_http_client
from mcp.shared._httpx_utils import create_mcp_http_client
out = []
async with create_mcp_http_client(headers={"Authorization": key}) as hc, \
streamable_http_client(MCP_URL, http_client=hc) as streams:
async with ClientSession(streams[0], streams[1]) as s:
await s.initialize()
for tool, args in calls:
res = await s.call_tool(tool, args, read_timeout_seconds=180)
out.append([c.model_dump(mode="json") for c in res.content])
return outThe folder has saved-prompt.md (the no-code version), article_summarizer.py, sample_output.md, sample_summary.md and offline tests in tests/.
Endpoints
MCP tool extractMCP tool ai-search
Example output
Saved sample from a run on 2026-10-18 at 16:03 Asia/Tbilisi, with --related, stored in sample_output.md. This page shows that stored response. It does not run a live demo.
Article: https://www.theguardian.com/technology/2026/oct/18/world-bank-artificial-intelligence-developing-economies
Text Desearch fetched: 616 words| Step | What came back |
|---|---|
| extract | 616 words of article text |
| Key points | 5 sentences quoted from the article |
| Numbers mentioned | 2 rows: 40%, and $120bn (£90bn) |
| ai-search (web) | 3 links from other sites |
Two of the quoted figures, exactly as the sample prints them:
- 40%: "Georgieva warned that over time 40% of jobs worldwide were likely to be either augmented or eliminated by AI, with the impact particularly acute for young people at the start of their careers."
- $120bn, £90bn: "Donohoe said the World Bank had mobilised $120bn (£90bn) of private capital in the past year using guarantees and other financial instruments, at a time when many countries, including the US and the UK, were cutting their aid budgets."
The saved prompt sample in sample_summary.md was written from those same 616 words. Its topic line:
The World Bank wants developing countries to build "small AI" that works on phones and in local languages.
That sample also quotes a figure the script does not pick up, because it is written as words: "almost a third of rural schools in sub-Saharan Africa lacked electricity and more than two-thirds did not have a consistent internet connection."
The script sample ends with this line:
Calls: 1 extract, 1 ai-search ($0.0040)Run it yourself
No code: connect the Desearch MCP server (https://mcp.desearch.ai/mcp) in Claude or Cursor with your API key in the Authorization header, paste saved-prompt.md, and replace <link> with your article link.
Script:
git clone https://github.com/Desearch-ai/desearch-py-examples && cd desearch-py-examples/article-summarizer-mcp
python -m venv .venv && . .venv/bin/activate
pip install -r requirements.txt
printf '%s' 'YOUR_KEY' > ~/.desearch-api-key && chmod 600 ~/.desearch-api-key # key from console.desearch.ai
python article_summarizer.py <link> --relatedUseful flags: --related (one extra ai-search call for other pages on the story), --bullets (key sentences to keep, default 5), --raw raw.json and --from-raw raw.json (save the responses, then rebuild the summary offline with no new calls), --key-file.
What it costs
saved-prompt.md records the 2026-10-18 run: the extract call cost $0.0005 on the REST price, and the optional ai-search call cost $0.004. The script sample prints Calls: 1 extract, 1 ai-search ($0.0040). The printed amount is the ai-search cost_usd field. See pricing.
Ideas to extend it
- Run it on the articles you plan to share this week and paste the "Numbers mentioned" lists into your newsletter draft.
- Change the prompt to write the bullets for a specific reader, such as your sales team or investors.
- Save the raw responses with
--rawand rebuild summaries later with--from-raw, with no new calls. - Use the saved prompt when you want bullets in plain words, and the script when you want the sentences quoted as written.
