isocast-mcp
Allows registering a Telegram chat ID to receive push notifications for purchased Isocast signals.
Click on "Deploy 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., "@isocast-mcpShow me a sample signal for Austin."
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.
isocast-mcp
MCP server for Isocast — Polymarket weather-market bucket-transition signals for AI agents. Discover cities and inspect the signal shape for free; buy prepaid signal bundles with USDC on Base via x402, poll the signals you are entitled to, and register Telegram push delivery.
5 free tools — no wallet, no API key.
4 paid/keyed tools — unlocked by an
EVM_PRIVATE_KEY(USDC on Base Mainnet for purchases).
An Isocast signal fires when a city's expected daily-high temperature bucket flips on the corresponding Polymarket market — the moment the market's implied outcome moves from one bucket to the next.
Quick start
Free tier (no wallet)
{
"mcpServers": {
"isocast": {
"command": "npx",
"args": ["-y", "isocast-mcp"]
}
}
}You get get_health, get_cities, get_city, get_sample_signal, get_signal_meta.
Paid tier (with wallet)
Add an EVM wallet private key (0x-prefixed) that holds USDC on Base Mainnet:
{
"mcpServers": {
"isocast": {
"command": "npx",
"args": ["-y", "isocast-mcp"],
"env": { "EVM_PRIVATE_KEY": "0x..." }
}
}
}This additionally unlocks buy_signals, poll_signals, set_telegram, get_spot.
Install snippets
Claude Code:
claude mcp add isocast -- npx -y isocast-mcp
# with a wallet:
claude mcp add isocast --env EVM_PRIVATE_KEY=0x... -- npx -y isocast-mcpClaude Desktop / Cursor: add the JSON block above to your MCP config
(claude_desktop_config.json or .cursor/mcp.json).
Related MCP server: oom-x402-mcp
Tools
Free tools
Tool | Description |
| Isocast API health, payment mode, OFAC status + signal freshness. |
| List every active city (slug, unit, timezone, station, latest signal seq). |
| One city by slug, with its current target market day + Polymarket URL. |
| A free real sample signal for a city (fixed seq-1, never the latest; cross-city fallback via |
| Pricing + payment metadata: unit price, min spend, network, payTo, tier table. |
Paid / keyed tools
Tool | Description | Cost |
| Buy the next N signals for a city (by | USDC via x402 |
| Read the signals you are entitled to, using a bundle receipt. | free (uses receipt) |
| Register/delete the Telegram chat_id that receives your signals. | free (signed intent) |
| Snapshot of a city's LATEST signal — exactly one, never history. Stock x402, no binding nonce; uncharged on unknown city / no data yet. | $0.01 via x402 |
Pricing
Signals are sold in prepaid bundles. The effective unit price drops as the requested
count crosses volume tiers (live values come from get_signal_meta):
Tier | Min count | Unit price (USDC) |
Min | 2 | $0.005 |
Starter | 20 | $0.005 |
Standard | 100 | $0.0045 |
Pro | 500 | $0.004 |
Whale | 2000 | $0.0035 |
Minimum spend: $0.01 (i.e. 2 signals). buy_signals with spend_usdc derives the
count from these tiers and refuses a spend that cannot meet the minimum.
Single latest signal: get_spot is a flat $0.01 USDC per call — one snapshot of a
city's latest signal (never history). It is a plain x402 pay-per-call, not a bundle, so it
carries no receipt token and needs no binding nonce.
How payments work (x402)
buy_signals speaks the x402 exact scheme over EIP-3009
transferWithAuthorization on Base:
POST /v1/subscribe?city=…&count=…with no payment → the API replies HTTP 402 with the accepted payment terms (accepts[]:amountin USDC atomic units,payTo,network) and anextra.bindingblock.The MCP constructs a signed USDC authorization and retries the request with the payment attached.
On success the API returns your
paidThroughSeq, a 24h receiptToken, and the settlementtxHash. The receipt is cached sopoll_signalscan read your bundle without re-paying.
The binding nonce (important)
Isocast is anti-grief: the EIP-3009 authorization nonce is not random — it is bound
to (payer, citySlug, count):
nonce = keccak256(abi.encodePacked(payer, citySlug, uint256 count, bytes32 salt))The 402 challenge publishes the salt, and the server recomputes and verifies this exact
nonce before settling — so a stock x402 client that sends a random nonce is
rejected. isocast-mcp computes the binding nonce for you automatically; you never
have to think about it.
The binding nonce applies only to bundle purchases (
buy_signals//v1/subscribe).get_spot(GET /v1/spot) is a stock x402 call with no binding nonce — any standard x402 client can pay it, and this MCP settles it with the vanilla@x402/fetchflow.
Environment variables
Variable | Required | Description |
| No | 0x-prefixed wallet key with USDC on Base Mainnet. Enables the paid/keyed tools. Free tools work without it. |
| No | Override the API base URL (default |
Disclaimer
Isocast provides informational data only. It is not financial, trading, or betting advice, and there is no guarantee of accuracy or of any market outcome. You assume all risk for any decisions you make. Prediction markets are restricted or prohibited in some jurisdictions — it is your responsibility to comply with the laws that apply to you. See https://isocast.dev/terms.
License
MIT © jcislo
Available Tools
5 toolsget_citiesA
List every active Isocast city — slug, display name, country, temperature unit, bucket width, timezone, resolution source, station, and the latest public signal sequence number. Use this to discover which weather markets have signals. Free, no wallet or API key required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It explicitly states 'Free, no wallet or API key required,' clarifying authentication needs, and lists the exact fields returned. It could define 'active' or mention pagination, but for a simple read-only list, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action and resource, and packs relevant details (fields, use case, auth) without fluff. Every clause 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?
Given the tool's simplicity (zero params, no output schema), the description covers purpose, use case, return fields, and access requirements. There are no significant gaps for an agent to invoke or interpret the tool correctly.
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 accepts no parameters, so the baseline for parameter semantics is 4. The description adds value by detailing what the output contains, compensating entirely for the empty schema and absence of output schema.
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 clearly states the tool lists every active Isocast city, enumerating specific fields returned (slug, display name, country, etc.). This distinguishes it from siblings like get_city which presumably targets a single city.
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 provides an explicit use case: 'Use this to discover which weather markets have signals.' It implies a broad listing role without naming alternatives, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cityA
Get one Isocast city by slug, including its current target market day and the Polymarket market URL. Free, no wallet or API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | City slug, e.g. 'toronto' (from get_cities) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description adds valuable behavioral context: it is free, requires no wallet or API key, and it discloses what the response includes (current target market day and Polymarket market URL). This covers access requirements and expected output, though it does not mention rate limits or error handling.
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 a single sentence that front-loads the core action and resource, then adds key details. Every phrase earns its place, with no redundant information.
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 simple one-parameter lookup tool with no output schema, the description provides enough context about the return contents ('current target market day' and 'Polymarket market URL'). It does not cover failure modes, but the simplicity and clear purpose make it nearly complete.
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 schema already covers the 'slug' parameter with a description, but the tool description adds context that slugs come from 'get_cities', which helps the agent understand where the value originates. This goes beyond the schema's static type/example.
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 uses a specific verb 'Get' with a clear resource 'one Isocast city by slug', and distinguishes itself from the sibling 'get_cities' by emphasizing 'one' and 'by slug'. This makes its purpose unambiguous.
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 implicitly indicates when to use this tool (when you have a slug for a single city) but does not explicitly mention alternatives like 'get_cities' for listing. It provides a usage prerequisite ('by slug') but lacks explicit 'vs alternative' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_healthA
Check Isocast API health: liveness (ok), configured payment mode (live|mock), OFAC screening status, and a signals freshness block (lastSignalAt, ageSeconds, stale). Free, no wallet or API key required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses that the tool is free and requires no credentials, and enumerates the specific behavioral output (liveness, payment mode, OFAC status, signals freshness). It doesn't explicitly state it's read-only, but the 'Check' verb implies non-mutating behavior.
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 exceptionally concise: two sentences that front-load the purpose, then specify the exact sub-checks and access requirements. Every clause adds useful information, with no filler or redundancy.
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 there is no output schema, the description does a good job of informing the agent what the response will contain by listing the health indicators and the signals freshness block. It could be more explicit about the overall response structure or what 'stale' means, but for a simple health-check tool, it covers the essential context adequately.
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 input schema has zero parameters, so the description's lack of parameter details is perfectly acceptable. Per the baseline for 0 params, a score of 4 is appropriate. The description adds value by describing the output fields, though parameter semantics are not applicable here.
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 starts with a specific verb 'Check' and resource 'Isocast API health', clearly distinguishing it from sibling data-retrieval tools. It enumerates the exact health aspects covered (liveness, payment mode, OFAC, signals freshness), leaving no ambiguity about its function.
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 provides clear context for when to use the tool: it's a health check and explicitly notes that it is free and requires no wallet or API key, implying it can be used without authentication. It doesn't explicitly mention alternatives or exclusions, but the distinct purpose and self-contained context make usage obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sample_signalA
Get a FREE sample Isocast signal for a city — the fixed seq-1 signal (never the latest), or, when that city has no servable sample yet, a REAL past signal from another city labeled via a sampleNote field. Always marked sample: true; never fabricated and never reveals any city's latest signal. Shows the exact shape of a bucket-transition signal (old/new reading, buckets with yes/no/midpoint, market URL) without paying. Free, no wallet or API key required. For live entitled signals, use buy_signals + poll_signals.
| Name | Required | Description | Default |
|---|---|---|---|
| city | Yes | City slug, e.g. 'toronto' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses key behaviors: always marks sample:true, never fabricated, never reveals latest signal, may substitute with another city's past signal labeled via sampleNote, and shows exact bucket-transition shape. This is rich behavioral context far beyond basic read-only hints.
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 front-loaded with the core purpose in the first sentence, followed by essential behavioral details and alternatives. Every sentence contributes meaningful information—no fluff or repetition. Despite a longer first sentence, the overall structure is efficient for the complexity conveyed.
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 only 1 parameter, no output schema, and no annotations, the description is remarkably complete. It explains the response shape (old/new reading, buckets with yes/no/midpoint, market URL), fallback logic, and differentiation from sibling tools. An agent can select and invoke this tool correctly without needing additional details.
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 input schema already has 100% coverage for the sole 'city' parameter with a clear description ('City slug, e.g. 'toronto''). The tool description adds minimal new parameter-specific semantics; it implies city is a slug but does not elaborate on format or constraints beyond schema. Baseline 3 is appropriate since schema handles the heavy lifting.
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 explicitly states 'Get a FREE sample Isocast signal for a city' with clear verb and resource, and further distinguishes from live signals by contrasting with buy_signals + poll_signals. It also clarifies the fallback behavior and output shape, making the tool's purpose unmistakable.
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 states when to use this tool (to get a sample without paying) and provides clear alternatives: 'For live entitled signals, use buy_signals + poll_signals.' It also notes no wallet/API key is needed, setting expectations for free usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_signal_metaA
Get Isocast pricing and payment metadata — per-signal unit price, minimum spend, currency, network, payTo address, and the volume tier table (Min/Starter/Standard/Pro/Whale). Pass a city to also get its latestSeq. NEVER returns any signal rows. Free, no wallet or API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Optional city slug to include its latestSeq |
TDQS
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 return contents (pricing/payment metadata, optional latestSeq), a key behavioral exclusion (no signal rows), and access requirements (free, no wallet/API key). This covers the main behaviors an agent needs, though it doesn't mention potential rate limits or error conditions. Still, the disclosure is transparent and valuable.
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 two sentences with a clear front-loaded main clause, details, a negative exclusion, and access prerequisites. Every clause adds value: the field list, the optional behavior, the NEVER statement, and the free/no-auth note. No fluff.
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?
The tool is simple (1 optional parameter, no output schema), and the description fully covers purpose, parameter usage, behavioral exclusions, and access constraints. It is self-contained and leaves no significant gaps for an agent to invoke it correctly.
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 100% for the single optional 'city' parameter, so the baseline is 3. The description adds real semantics by explaining that passing a city includes its latestSeq, which goes beyond the schema's generic 'Optional city slug'. This clarifies the parameter's effect and justifies a score above baseline.
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 uses specific verbs and resources: 'Get Isocast pricing and payment metadata' and lists exact fields (unit price, minimum spend, currency, network, payTo, volume tiers). It clearly distinguishes from sibling tools by stating 'NEVER returns any signal rows', which sets it apart from get_sample_signal. The purpose is unmistakable.
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 provides clear context: it explains the optional 'city' parameter to get latestSeq and explicitly states exclusions ('NEVER returns any signal rows'). It also notes no auth required. However, it does not explicitly name alternative tools or state 'use this for metadata', so it falls short of a 5 by not providing direct when/when-not comparisons.
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.
5 tool updates
v0.2.0- First observed
get_cities - First observed
get_city - First observed
get_health - First observed
get_sample_signal - First observed
get_signal_meta
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: health check, list cities, get a single city, get a sample signal, and get pricing metadata. No two tools overlap in functionality, so an agent can unambiguously select the right one.
All tool names follow the same verb_noun pattern: get_health, get_cities, get_city, get_sample_signal, get_signal_meta. This is highly predictable and consistent.
With 5 tools, the server is well-scoped for a read-only API providing public data and metadata. Each tool earns its place without redundancy or bloat.
The description explicitly references buy_signals and poll_signals as the way to get live entitled signals, but these tools are missing from the server. This leaves a significant gap in the core workflow of actually obtaining signals, making the tool surface incomplete for the apparent domain.
Maintenance
Related MCP Connectors
x402 MCP for agents: crypto prices, funding, DeFi yields, Polymarket, Base RPC + MCP security.
Real-time planetary signal engine and Model Context Protocol (MCP) server for autonomous AI agents.
37 paid x402 MCP tools for OSINT, prediction markets, web intel, and agent security on Base USDC.
15 paid AI agent primitives via x402 (USDC on Base). Pay-per-call MCP server.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceMCP server enabling AI agents to place bets on Polymarket using CLOB v2 with x402 payment and auto-setup.-

oom-x402-mcpofficial
FlicenseNot gradedqualityBmaintenanceMCP server exposing 1,000+ pay-per-call API endpoints across agent infrastructure (memory, coordination, secrets, verification), data, compute, finance, weather, geography, and reference categories — payments via x402 protocol in USDC on Base.-- AlicenseNot gradedqualityCmaintenanceMCP server providing 50+ crypto, market intelligence, and AI inference endpoints with x402 pay-per-request micropayments on Base.1Apache 2.0
- AlicenseAqualityCmaintenanceMCP server for Signalis, providing AI agents with pay-per-call global intelligence including Master Intelligence digests and Pulse narratives, with payments settled in USDC on Base via x402.103MIT