MCP Server

v0.1.0

carbon.fyi is readable by agents. Everything on the News and Data tabs is available over the Model Context Protocol — a curated archive of voluntary carbon market stories, live carbon credit prices, and a price history archive we record ourselves.

The endpoint is free, keyless, and read-only. There is no account, no API key, and nothing on this site an agent can change.

Endpoint (Streamable HTTP)
https://www.carbon.fyi/api/mcp

6 tools. Start with get_market_summary — it returns the archive size, the available story tags, and the current price table in one call, which is usually enough to decide what to ask next.

Connect

Any client that speaks Streamable HTTP can connect with the URL alone. Two common cases:

Claude Code
claude mcp add --transport http carbon-fyi https://www.carbon.fyi/api/mcp
Cursor / editors using mcp.json
{
  "mcpServers": {
    "carbon-fyi": {
      "url": "https://www.carbon.fyi/api/mcp"
    }
  }
}

For a client that only speaks stdio, proxy it with npx mcp-remote https://www.carbon.fyi/api/mcp.

Tools

Every tool is read-only. The cost column is the only interesting distinction: cached tools are served from a shared cache for up to 15 minutes, so they are cheap to call repeatedly. Live tools query the database on every call and are rate-limited more tightly.

Orientation

ToolCostWhat it does
get_market_summarycachedOne-call orientation: how many stories are published, when the feed last updated, the current price table, and the story-tag breakdown.
list_sourcescachedThe publications and registries carbon.fyi monitors, with tier and type.

News

ToolCostWhat it does
search_newscachedSearch the curated voluntary-carbon-market story archive by free text, tag, or date. Every result carries its original source name and URL.
get_storycachedOne story in full by cluster id, with every source that reported it. Story ids are permanent.

Prices

ToolCostWhat it does
get_carbon_pricescachedCurrent carbon credit prices — per-category min/median and available supply from Carbonmark, plus Klima Protocol carbon-class spot prices.
get_price_historyliveDaily-averaged price series for a category or carbon class. This archive exists only because we record it; no upstream API serves a historical series.

Example

The three most recent integrity stories — ICVCM decisions, CCP labels, fraud and quality rulings — straight over JSON-RPC, no client library:

curl -s -X POST https://www.carbon.fyi/api/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{
    "jsonrpc": "2.0", "id": 1, "method": "tools/call",
    "params": {
      "name": "search_news",
      "arguments": { "tag": "integrity", "limit": 3 }
    }
  }'

Each story comes back with its headline, the editorial summary, its tag, every publication that reported it, and a permanent link. In an agent, the same thing is just a question — “what has happened with carbon credit integrity rulings this month?” — and the model picks the tool and the tag itself.

Using the data

There are two key factors that should be considered when utilizing this functionality:

Cite the original source, not carbon.fyi. Our story summaries are editorial rewrites of other people’s reporting, not quotations. Every story carries the publication’s name and URL for exactly this reason — the journalism is theirs, and the link should survive into whatever you build.

Prices are observations, not valuations. Carbonmark category figures are median listed asking prices, not cleared transactions. Klima carbon-class figures are protocol AAM spot prices, inversely related to how much credit is left in a class, so a heavily supplied class prices far below the wider market. Neither is “the price of carbon”, and neither is advice.

Coverage is editorial and not exhaustive. Absence of a story is not evidence that nothing happened — call list_sources to see what is actually monitored.

Versioning

v0.1.0

The version above describes the agent contract — the tools and the shape of their responses — not the website. It moves when the contract moves, and not when the news copy or the styling changes.

  • New fields may be added to any response without a major version bump — ignore fields you do not recognise.
  • Story ids (`cluster_id`) are permanent. A story that has been published keeps its id and its /news/<id> URL forever.
  • Removing a tool, removing a response field, or changing what a field means is a MAJOR version bump with a changelog entry.
  • Prices are point-in-time observations, never valuations or advice. Every price payload states its source and its caveats.

Changelog

v0.1.02026-08-27
  • Initial public release: six read-only tools over the news archive and live carbon prices.
  • Streamable HTTP transport at /api/mcp, keyless. No authentication required.
  • Discovery published at /.well-known/mcp/server.json and /.well-known/agent-card.json.

Machine-readable discovery

For crawlers, registries and agents that would rather read a document than a web page:

All three are generated from the same tool catalog that the server itself registers from, so they cannot describe a server we do not run.