cryptonews.is
ข่าวคริปโตแบบเรียลไทม์จากแหล่งข่าวกว่า 1,000 แห่ง จัดกลุ่มตามเรื่องราว ใน 28 ภาษา พร้อมการวิเคราะห์ความรู้สึกจากข่าว
เซิร์ฟเวอร์ MCP แบบโฮสต์
npx add-mcp 'https://mcp.cryptonews.is/mcp'ติดตั้งลง Claude Code, Codex, Cursor และอื่นๆ
เอกสาร
On this page
Quickstart
Choose how you want to connect.
Connect an agent
Choose your app for setup instructions. Connect with OAuth and sign in with your email; no API key to copy.
Claude
Open CryptoNews in the Claude directory, connect it to your account, and follow the sign-in prompts.
Claude (connector)
For manual setup, open Settings → Connectors in Claude, add a custom connector with this URL, and sign in with OAuth.
https://mcp.cryptonews.is/mcp
Claude Code (OAuth)
Run this command, then follow Claude Code’s prompts to sign in through your browser.
claude mcp add --transport http cryptonews https://mcp.cryptonews.is/mcp
ChatGPT
- Open Plugins in ChatGPT, select the plus button, then Add custom MCP server.
- Name it CryptoNews and enter the server URL below under Connection.
- Choose OAuth, review the connection details, and select Create as a plugin. Follow the prompts to sign in with your email.
- Install the plugin. In a new chat, type
@and select CryptoNews.
ChatGPT connection
https://mcp.cryptonews.is/mcp
Custom MCP connections depend on your account and workspace permissions. See OpenAI’s connection guide for the current setup steps.
Call the REST API
Sign in, create an API key on your account page, then replace <key> in the command below. MCP clients that accept an API key can use the same key.
REST
curl https://api.cryptonews.is/v1/stories -H "Authorization: Bearer <key>"
Claude Code with an API key
claude mcp add --transport http cryptonews https://mcp.cryptonews.is/mcp --header "Authorization: Bearer <key>"
Any MCP client
https://mcp.cryptonews.is/mcp
Authorization: Bearer <key>
Plans and limits
One account covers MCP and REST.
| Plan | Price | Calls/day | Per minute | Keys | What it unlocks |
|---|---|---|---|---|---|
| Free | $0 | 100 | 10 | 1 | latest_stories, get_sentiment, get_technicals, get_market, status |
| Standard | $29 / 30 days $290 / 12 months | 10,000 | 60 | 3 | latest_stories, get_story, get_developing, get_sentiment, get_sentiment_history, get_technicals, get_market, changes_since, status |
| Pro | $99 / 30 days $990 / 12 months | 50,000 | 300 | 10 | latest_stories, get_story, get_developing, search_stories, get_sentiment, get_sentiment_history, get_technicals, get_market, changes_since, status; daily exports and live stream |
Tools and endpoints
Use MCP tools or their GET endpoints.
| Tool / what it returns | REST path (GET) | Plans | Arguments |
|---|---|---|---|
latest_stories Ranked current stories. | /v1/stories | All | window, category, language, limit, coin |
get_story Story detail and publisher reports, including archived stories. | /v1/stories/{id} | Standard, Pro | id, language |
get_developing Developing event threads and their cited synthesis pages. | /v1/developing /v1/developing/{slug} | Standard, Pro | slug, section |
search_stories Full-text story search ranked by relevance. | /v1/search | Pro only | query, since, until, coin, category, limit, offset |
get_sentiment Current sentiment and its strongest drivers. | /v1/sentiment | All | window, limit, detail |
get_sentiment_history Historical sentiment readings. | /v1/sentiment/history | Standard, Pro | window, resolution, from, to |
get_technicals Technical readings for ten large coins: trend, momentum and stretch. Signals, not advice. | /v1/market/technicals | All | symbol, timeframe |
get_market Market quotes, top coins, total market cap and coins named in current stories. | /v1/market | All | None |
changes_since Story changes since an edition cursor, ranked by prominence. | /v1/changes | Standard, Pro | cursor, limit, detail |
status Plan, combined usage and upstream freshness. | /v1/status | All | None |
| REST onlyMarket candles. | /v1/market/candles | Standard, Pro | symbol, timeframe, limit |
| REST onlyHourly archive records as daily JSONL files. | /v1/exports/{date}/{readings|stories}.jsonl | Pro only | UTC date, kind |
| REST onlyLive story and reading events. | /v1/stream | Pro only | None |
tools/list shows every tool on every plan; a tool your plan cannot use starts its description with the plan that unlocks it.
Market technicals
Signals, not advice.
get_technicals and /v1/market/technicals return ten coins across 4h, 1d and 1w. Optional symbol: BTC, ETH, SOL, XRP, BNB, DOGE, ADA, TRX, AVAX or LINK (case-insensitive). A timeframe requires a symbol and returns that verdict with candles.
Free keeps label, score, agree, total, stretch.label and candle interval, last_close_at and stale. Standard and Pro include trend, momentum and stretch signals and verdict history. Standard keeps the last 120 candles; Pro keeps up to 300. Candle source attribution accompanies each response.
REST-only /v1/market/candles requires Standard or Pro, symbol and timeframe. limit defaults to 120, accepts 1–300, and is capped at 120 on Standard.
Common arguments
Use these values across tools and endpoints.
| Argument | Accepted values | Default | Notes |
|---|---|---|---|
window | 15/30/60/240/1440 minutes or 15m/30m/1h/4h/24h | — | Reading window. |
limit | Stories: max 100; sentiment drivers: max 50; search: max 50; changes: 1–500 | Stories, sentiment and search: 20; changes: 100 each for added and changed | Free: at most 20 stories or sentiment drivers. A larger Free limit returns 20 items and adds limit_applied: 20. Limits above the maximum return 400. |
detail | compact or full | compact | Sentiment compact is ~550 bytes per driver. Change-feed compact fields are listed below. |
coin | Symbol, such as BTC | — | Filter by coin. |
category | markets economy regulation technology security business adoption | — | Case-insensitive. Invalid categories return 400 invalid_category with supported_categories. |
language | en pt es ja ko hi uk th zh-Hans de id ru vi tr bn ur pl ar fr zh-Hant it fa fil nl ms ro cs he | — | Unsupported codes return 400 unsupported_language with supported_languages. |
id | Story id from a stories response | — | Full ids or unique short prefixes; see Story ids. |
from / to | ISO date-times; at most 72 hours per call | from: 24 hours before to | Page through longer spans; see Sentiment history for plan access. |
resolution | auto, raw, 1m, 5m, 15m or 1h | auto | UTC buckets; see Sentiment history. |
cursor | Cursor from a stories response | Required | Use with changes_since or /v1/changes. |
query / q | 1–200 characters, up to 12 terms | Required | MCP: query; REST /v1/search: q. Pro only. |
since / until | ISO date-times | Optional | Search filters compared with event_at. |
offset | 0–1000 | 0 | Returned for search paging. |
Story ids
Keep the full id or reader link when citing a story.
- A story’s id can change once grouping settles, and old ids keep resolving to the current story: a merged id returns the current story with
replaced_by(its id) andrequested_id(the id you asked for);archivedmarks archived responses. - A shortened id (at least 8 characters after an optional
rg-, a trailing … is ignored) resolves when exactly one story id starts with it; otherwise the answer is 400ambiguous_idwith up to 5candidates. - Cite stories by their full id or
reader_url.
Sentiment history
Read historical sentiment in bounded time ranges.
- History
fromandto: ISO date-times, at most 72 hours per call (page through longer spans); Standard reaches back 30 days:fromandto(and the defaultfrom, 24 hours beforeto) must all fall within the last 30 days, otherwise 403plan_requirednaming Pro. - Pro reaches the whole record.
recorded_fromis2026-10-29T02:17:00Z: minute history is recorded from then; earlier ranges return only the native’s live history or nothing.- History
resolution: auto (default), raw, 1m, 5m, 15m or 1h. - Buckets align to UTC and use the last sample’s score with
atstamped at the bucket start; auto chooses the smallest bucket returning at most 300 points, or 1h. - Raw keeps every point.
- Responses include the resolved
resolutionandavailable_from(earliest returned point, or null).
Archive, copy and search
Look up saved stories and search the indexed record.
- Standard and Pro story lookup includes archived stories and their publisher reports.
- Archived responses include
archived:true; a requested language uses the saved translation when available, otherwise English. - Story detail always includes
language; null means the copy is not written yet; missing language with completed copy defaults to English. - Every tool marks stories with empty or missing summaries as
copy_pending:true; completed copy omits the flag. copy_skipped: the story is rated negligible and will not get a summary; such stories carry nocopy_pending.- If the story later gains copy, the field disappears and the change arrives in
changes_since. event_atis the time of a story’s first report andupdated_atof its newest; a newer report is a change inchanges_since.- Search results from older archive rows may omit
updated_at. get_storyon a merged id addsrequested_report: up to five of that id’s own reports with their copy.
Search Pro
search_storiessearches indexed headlines, summaries, publisher headlines, sources and coins.- Use
queryin MCP orqon/v1/search(1–200 characters, up to 12 terms). - A story matches if it contains any term; English stop words such as who or what are ignored and English words are stemmed, so hacked finds hack.
- Common acronyms match their spelled-out forms (SEC, ETF, DPRK, Fed, …), and a coin symbol typed in capitals also matches the coin’s name.
- Results are ranked by relevance: stories that match more terms, especially in the headline, come first, and live, summarised and recently updated stories are boosted over archived or copy-pending ones; among matches of comparable relevance, the latest development comes first.
- Twins of one article (same publisher URL or headline) appear once.
- Optional
sinceanduntilare ISO date-times compared withevent_at;coinandcategoryfilter stories. - Search limit defaults to 20, maximum 50.
offsetis 0–1000, default 0, and is returned for paging.- Results mark current drivers
archived:false, othersarchived:true; archived ids resolve viaget_story, which may returnreplaced_by. - A merged id is returned as its current story with
replaced_by(its id) andrequested_id(the merged id). - Each result carries
reports: up to 3 of its outlets’ own English headlines and summaries (source_name,published_at): the earliest published report first, usually the original source, then those matching the query, summaries cut to two sentences. reports_totalcounts all of the story’s reports;get_storylists them whole.- Results include
totalandindexed_through; indexing runs every ten minutes and older archive coverage grows during backfill.
Change feed and cursors
Follow story changes from an edition cursor.
changes_since//v1/changesneeds acursor.- Take the first from
cursorin a stories response. limit: 1–500, default 100 each for added and changed, sorted by prominence descending; removed IDs are unbounded.- IDs in
removedthat were re-keyed appear inreplaced_bywith their new id. detail: compact (default) or full.- Compact stories keep id, headline, category, secondary_category, coins, sentiment_label, sentiment_score, prominence, coverage_count, event_at, updated_at, reader_url, language, copy_pending and copy_skipped when applicable.
- The cursor still advances to the newest edition.
- When
truncatedappears, its added/changed counts give the totals; calllatest_storiesfor the full current list. - A malformed cursor returns 400
invalid_cursor. reset:true(old epoch or expired cursor) comes with empty lists: re-readlatest_storiesand continue from its cursor.contributionon full-detail items is a snapshot; a change in it alone is not reported.
Illustrative request and response; use the cursor from your stories response.
{
"name": "changes_since",
"arguments": {"cursor": "<cursor>", "limit": 100, "detail": "compact"}
}
{
"cursor": "<next cursor>",
"added": [{"id": "<story id>", "headline": "<headline>"}],
"changed": [],
"removed": [],
"replaced_by": {}
}
Live stream (Pro)
Subscribe to live events over REST.
- Pro only, REST:
/v1/streamreturnstext/event-streamusing the same Bearer header as other endpoints. - Events are
hello(cursor and method),story(added or changed story),removed(story IDs),reading(changed window reading), andreset. - A ping comment keeps idle connections active.
- Limits are two connections per account and 200 overall; excess connections return 429
stream_limit. - Each connection costs one call.
- Reconnect with backoff and re-read
/v1/storiesafterreset; the stream has no replay guarantee.
Daily exports (Pro)
Download archived hours one UTC day at a time.
- Pro only, REST:
/v1/exports/{date}/{readings|stories}.jsonlstreams hourly archive records in UTC hour order asapplication/x-ndjson. - Dates run from 2026-10-29 through yesterday; today and future dates return 400.
- Missing hours are listed in
X-Missing-Hours; no available hours returns 404. - Story rows retain archive duplicates.
- Each file costs one call.
Freshness
Check freshness before using time-sensitive data.
- When upstream is briefly unavailable, every read tool answers from its last good copy with
stale: trueandagein seconds. - Check them before using time-sensitive data.
changes_sincewith no saved answer returns your cursor with empty lists andstale: true: poll again with the same cursor.- When nothing can be served, the answer is 503
upstream_unavailablewithretry_afterand aRetry-Afterheader (MCP:isError).
What counts as a call
Daily usage is shared across both transports.
Both transports share your daily allowance.
Counted
- Every authenticated MCP
tools/calland REST request. - Rejected requests, including 400, 403
plan_required, 404 and 405.
Not counted
status(tools/call statusandGET /v1/status); it still counts toward the per-minute limit, andusage_todayleaves it out.- 429 responses.
- MCP initialize, tools/list, ping and notifications.
- Requests refused before the account is known: 401, suspended accounts, keys disabled by the plan.
Errors and headers
Use error codes and response headers to decide what to do next.
| Error | HTTP status | Meaning |
|---|---|---|
unauthorized | 401 | Invalid credentials. OAuth connector tokens cannot be used on REST. |
plan_required | 403 | The tool or history range needs a higher plan; required_plan names it. |
rate_limited | 429 | Per-minute limit reached; retry_after gives seconds to wait. |
quota_exceeded | 429 | Daily limit reached; retry_after gives seconds until reset. |
invalid_cursor | 400 | Malformed change-feed cursor. |
unsupported_language | 400 | Unsupported code; supported_languages lists accepted codes. |
invalid_category | 400 | Invalid category; supported_categories lists accepted categories. |
ambiguous_id | 400 | Story prefix does not resolve uniquely; up to 5 candidates. |
upstream_unavailable | 503 | No saved answer can be served; retry_after and Retry-After say when to retry. |
stream_limit | 429 | Live-stream connection limit reached. |
REST takes API keys (cnis_live_…) only. OAuth connector tokens work only on MCP; on REST they get 401 with a message saying so.
REST errors use these JSON shapes; MCP tool errors carry the same body in structuredContent with isError:
{"error":"unauthorized","status":401,"message":"Invalid credentials."}
{"error":"plan_required","status":403,"message":"get_story needs the Standard plan. Upgrade at mcp.cryptonews.is/account/upgrade or email api@cryptonews.is.","required_plan":"standard"}
{"error":"rate_limited","status":429,"message":"Per-minute limit reached.","retry_after":60}
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Daily allowance on metered responses. |
X-RateLimit-Remaining | Daily calls remaining on metered responses. |
X-RateLimit-Reset | Reset time in Unix seconds on metered responses. |
Retry-After | Seconds to wait on 429 and upstream_unavailable responses. |
X-Plan-Expires | Included on REST responses in the last 7 days of a paid plan. |
X-Missing-Hours | Missing UTC hours in a daily export. |
Requests that Cloudflare’s security layer (WAF) blocks as attacks get HTTP 403 with an HTML page, not a JSON error.
Method versions
Compare readings computed with the same method.
Every reading carries method, identifying how it was computed. METHOD.md describes the calculation and version changes; compare versions when comparing readings.
Attribution and use
Credit the source when displaying data.
Free is for personal use with credit. Standard and Pro may display data with credit and a link to the story’s reader_url. Display means showing stories inside your own product, with credit and the reader link. No more than 20 stories may be shown at once. Your product may not be, or present itself as, a general crypto news site or front page built from this data. No resale or model training. Read the terms and privacy.
Upgrading
Choose the access your project needs.
Choose a plan at checkout. Standard is $29 / 30 days; Pro is $99 / 30 days. Free is $0. Paid plans return to Free at expiry.
Founding offer: while places last, pay for 30 days of Standard and get Pro for 90 days, once per account.