# oracle-feeds-mcp [Health: Active]

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/rileybuilds/oracle-feeds-mcp  
**GitHub Stars:** 0  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/oracle-feeds-mcp

## Description
On-chain price oracles: Chainlink (5 chains) + Pyth, staleness-flagged, no forced RPC key.

## Claude Desktop Quick Installation
Remote MCP endpoint (confidence: high). Install path detected from listing signals. Add as a URL/SSE server in your client:

```json
"mcpServers": {
  "oracle-feeds-mcp": {
    "url": "https://modelcontextprotocol.io"
  }
}
```

## Documentation & README

# oracle-feeds-mcp

An [MCP](https://modelcontextprotocol.io) server for on-chain price oracle data, covering **two independent providers** — Chainlink and Pyth Network — instead of one.

## Why this exists

The only prior MCP server in this space, [`kukapay/chainlink-feeds-mcp`](https://github.com/kukapay/chainlink-feeds-mcp), is Chainlink-only, hard-requires an Infura API key, has a `queryPriceByRound` tool that's a placeholder (it silently calls `latestRoundData()` again regardless of the round you asked for), and ships with no tests. This project covers the same ground plus more, and fixes those specific gaps:

| | `chainlink-feeds-mcp` | `oracle-feeds-mcp` |
|---|---|---|
| Providers | Chainlink only | Chainlink **and** Pyth |
| RPC | Requires your own Infura key | Free public RPCs by default, no key needed |
| Historical round lookup | Placeholder — re-fetches latest round | Real `getRoundData(roundId)` call |
| Staleness | Not surfaced | Every result flags `stale: true/false` based on the feed's own on-chain/publish timestamp |
| Feed discovery | Static list only | Static Chainlink registry **plus** live search over Pyth's full catalog (`searchPythFeeds`) |
| Tests | None | 21 tests covering staleness math, feed lookup, and both providers (network calls mocked) |

This is a **data-access** tool: it returns oracle-reported prices as-is, with a timestamp and an age-based staleness flag. It does not attempt to verify, reconcile, or arbitrate between providers — if you need a "which source is more trustworthy" judgment, that's a different, harder problem this project deliberately does not take on.

**Downstream use note:** oracle price data is commonly consumed by autonomous on-chain trading or rebalancing agents. This server is read-only and moves no funds itself, but if you wire its output into an agent that executes trades, you are responsible for whatever risk controls that agent needs — this tool has no opinion on trade sizing, slippage, or execution safety.

## Tools

- `getChainlinkPrice({ chain, pair })` — latest Chainlink price, with staleness flag.
- `getChainlinkRoundPrice({ chain, pair, roundId })` — a specific historical Chainlink round.
- `listChainlinkFeeds()` — every chain + pair in the curated Chainlink registry.
- `listSupportedChains()` — just the chain list.
- `getPythPrice({ symbol })` — latest Pyth price, by symbol (`SOL/USD`) or raw feed ID.
- `getPythHistoricalPrice({ symbol, unixTimestamp })` — Pyth price as of a given time.
- `searchPythFeeds({ query })` — search Pyth's live catalog (hundreds of feeds, not hardcoded).

Every price result includes `updatedAt`, `ageSeconds`, and `stale` (age beyond a 1-hour default threshold).

## Coverage

Chainlink feeds are a **curated** registry (not an exhaustive mirror) across 5 EVM chains — Ethereum, Base, Arbitrum, Polygon, Optimism — with major pairs (BTC, ETH, USDC, USDT, DAI, LINK, SOL, and a few chain-native assets) on each. See [`src/feeds/chainlink.ts`](https://github.com/rileybuilds/oracle-feeds-mcp/blob/HEAD/src/feeds/chainlink.ts); it's a plain data file, easy to extend with more chains or pairs.

Pyth coverage is effectively everything in [Pyth's live catalog](https://www.pyth.network/price-feeds) — `searchPythFeeds` and `getPythPrice` query Hermes directly rather than vendoring a static list, so new Pyth feeds show up automatically.

## Install & run

```bash
npm install
npm run build
npm start
```

Runs as a standard stdio MCP server — point any MCP client at `node dist/index.js`.

No API keys or environment variables are required. Chainlink reads use free public RPC endpoints (`*.publicnode.com`); Pyth reads use its public Hermes REST API.

## Development

```bash
npm test        # 21 tests, network calls mocked
npm run typecheck
```

## Disclosure

This repository is built and maintained by an AI agent (`rileybuilds`), operating with human oversight. See the account bio.

## License

MIT

