Skip to main content
The Celo MCP Server gives AI assistants and editors read access to Celo โ€” blocks, transactions, token balances, gas fees, governance proposals, staking and validator data. It runs locally over stdio, or as a remote endpoint over Streamable HTTP. Every tool is a query. The server never signs or sends a transaction, so it cannot move funds. To give an agent a wallet, see Celina.

What it covers

  • Network status, blocks and transactions
  • CELO, ERC-20 and Mento stablecoin balances for any address
  • EIP-1559 gas fee data
  • Governance proposals and proposal details
  • Staking balances, activatable stakes, validator groups and network-wide staking metrics

Prerequisites

  • Python 3.11 or higher
  • An MCP-capable client โ€” VS Code, Cursor, Claude Desktop, Claude Code, Windsurf or a JetBrains IDE

Install

uvx celo-mcp also works and needs no install step; the client configurations below use it.
The server always reads from Celo Mainnet at https://forno.celo.org. The RPC endpoint is not configurable in the current release โ€” the client is constructed without arguments, so neither CELO_RPC_URL nor the CELO_MCP_-prefixed settings reach it. There is no testnet mode.

Connect your client

VS Code reads .vscode/mcp.json in your workspace, or the user-level file opened with MCP: Open User Configuration from the command palette. The key is servers, not mcpServers:
Try it:

Available tools

Network and blocks

  • get_network_status โ€” current network status and connection information
  • get_block โ€” a block by number, hash, or latest
  • get_latest_blocks โ€” recent blocks; count defaults to 10 (max 100) and offset skips that many blocks back from the head
  • get_transaction โ€” transaction detail by hash

Balances and fees

  • get_celo_balances โ€” CELO plus the core Mento stablecoins for an address; symbols are read from each contract on chain, so they come back as USDm, EURm and BRLm
  • get_stable_token_balance โ€” a wider set of tokens in one multicall: CELO, the Mento stablecoins, and USDC, USDT, USDGLO, cKES and others; symbols come from the serverโ€™s built-in token table, so the same three stablecoins are reported as cUSD, cEUR and cREAL
  • get_token_balance โ€” the balance of one specific token for an address
  • get_gas_fee_data โ€” current gas fees, including EIP-1559 fields
USDm, EURm and BRLm are the on-chain symbols of the Mento stablecoins, formerly cUSD, cEUR and cREAL. The two balance tools above name the same three assets differently, so match on the token address rather than the symbol when you combine their output. USDM with a capital M is a different asset from a different issuer.

Governance

  • get_governance_proposals โ€” governance proposals, paginated; page_size defaults to 10 (max 20)
  • get_proposal_details โ€” detail for one proposal

Staking and validators

  • get_staking_balances โ€” staking balances for an address, by validator group
  • get_activatable_stakes โ€” pending stakes that can be activated for rewards
  • get_total_staking_info โ€” network-wide staking and participation metrics
  • get_validator_groups โ€” validator groups with members, votes, capacity and performance. Paginated, page_size defaults to 10, so a single call is not the full set
  • get_validator_group_details โ€” detail for one validator group

Run as a remote HTTP endpoint

Running the server over Streamable HTTP lets clients connect with a single URL and no local Python install. This is server operation โ€” if you only want the server on your own machine, the stdio configurations above are all you need.
MCP_TRANSPORT, HOST and PORT set the same three values from the environment.
The defaults bind 127.0.0.1 and accept only localhost hostnames. A remote client against a default-configured server fails twice over: connection refused, because nothing listens on the public interface โ€” fix with --host 0.0.0.0 or HOST; then HTTP 421 Misdirected Request, because the DNS-rebinding check rejects the public hostname โ€” fix by setting MCP_ALLOWED_HOSTS to that hostname.
GET /health returns 200 for hosting health checks. Point a remote-capable client at the URL. The type field is required โ€” an entry with a url and no type is read as a stdio server and silently skipped:
With MCP_AUTH_TOKEN set on the server:

Development

Resources