QELT MCP Server
Complete developer documentation for the official QELT Blockchain MCP Server. Enable any AI agent to interact with QELT blockchain, QXMP Oracle, Uniswap v4, Mainnet Indexer, and smart contract verification through the Model Context Protocol.
Overview
The QELT MCP Server is the official gateway that enables AI agents to interact with the entire QELT blockchain ecosystem using the Model Context Protocol (MCP) — the open standard adopted by Claude, Cursor, Windsurf, and other major AI platforms.
| Specification | Value |
|---|---|
| Package | @qelt/mcp-server |
| Version | 1.0.1 |
| npm | npmjs.com/package/@qelt/mcp-server |
| Protocol | Model Context Protocol (MCP) |
| Transports | stdio (local) + HTTP/SSE (remote) |
| Tools | 44 |
| Resources | 9 |
| Prompts | 5 |
| Authentication | None required |
| License | MIT |
What is MCP?
The Model Context Protocol (MCP) is an open standard originally created by Anthropic and now governed by the Linux Foundation. It provides a universal way for AI applications to discover and use tools, read data resources, and follow guided workflows. Think of it as "USB for AI agents" — one protocol, any AI application.
Key Features
44 Tools
Full access to QELT blockchain, indexer, oracle, Uniswap v4, and contract verification
9 Resources
Static reference data: network configs, contract addresses, API documentation
5 Prompts
Guided multi-step workflows for common tasks
Dual Transport
stdio for desktop AI apps, HTTP/SSE for remote agents
Built-in Caching
Intelligent TTL-based caching aligned with upstream update frequencies
Stateless & Secure
Never stores private keys; write operations accept pre-signed transactions
Rate Limit Aware
Respects upstream API limits with exponential backoff and retry logic
Zero Config
Works immediately with npx @qelt/mcp-server — no API keys or setup needed
Supported AI Platforms
| Platform | Transport | Configuration |
|---|---|---|
| Claude Desktop | stdio | claude_desktop_config.json |
| Cursor IDE | stdio | .cursor/mcp.json |
| Windsurf | stdio | MCP settings |
| VS Code + Continue | stdio | MCP config |
| Custom AI Agents | HTTP/SSE | Connect to /sse endpoint |
| ChatGPT (via plugins) | HTTP/SSE | Connect to /sse endpoint |
Quick Start
No installation needed. AI platforms run the server automatically via npx.
Installation via npx (Recommended)
{
"mcpServers": {
"qelt": {
"command": "npx",
"args": ["@qelt/mcp-server"]
}
}
}Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"qelt": {
"command": "npx",
"args": ["@qelt/mcp-server"]
}
}
}Restart Claude Desktop. You'll see "QELT" in the MCP tools menu with 44 tools available.
Cursor IDE
Add to .cursor/mcp.json in your project root:
{
"mcpServers": {
"qelt": {
"command": "npx",
"args": ["@qelt/mcp-server"]
}
}
}Remote HTTP Server
For remote AI agents or custom integrations:
# Start the server npx @qelt/mcp-server --transport http --port 3000
Endpoints:
| Endpoint | Method | Description |
|---|---|---|
| /sse | GET | SSE connection for MCP protocol |
| /message | POST | MCP message endpoint |
| /health | GET | Server health check |
| / | GET | Server info and capabilities |
Health Check Response
{
"status": "healthy",
"server": "@qelt/mcp-server",
"version": "1.0.1",
"transport": "http+sse",
"tools": 44,
"uptime": 123.456
}Global Installation (Alternative)
npm install -g @qelt/mcp-server # Run with stdio qelt-mcp # Run with HTTP qelt-mcp --transport http --port 3000
Blockchain Tools
Direct JSON-RPC interaction with QELT blockchain nodes. All tools support both mainnet (Chain ID: 770) and testnet (Chain ID: 771).
qelt_getBlockNumber
Get the latest block number on QELT blockchain.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| network | string | No | mainnet | mainnet or testnet |
{
"success": true,
"data": {
"blockNumber": "0xdab42",
"blockNumberDecimal": 896322
}
}qelt_getBlock
Get a block by number or hash from QELT blockchain. Returns full block data including all transactions.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| blockId | string | Yes | — | Block number (decimal) or block hash (0x-prefixed hex) |
| network | string | No | mainnet | mainnet or testnet |
qelt_getBalance
Get native QELT token balance for an address. QELT has 18 decimals and zero gas fees (base fee = 0).
| Parameter | Type | Required | Description |
|---|---|---|---|
| address | string | Yes | Ethereum-compatible address (0x-prefixed) |
| network | string | No | mainnet or testnet (default: mainnet) |
{
"success": true,
"data": {
"balanceWei": "0x8ac7230489e80000",
"balanceQELT": "10"
}
}qelt_getTransaction
Get transaction details by hash. Returns full transaction object including from, to, value, gas, gasPrice, input data, blockNumber, and transactionIndex.
| Parameter | Type | Required | Description |
|---|---|---|---|
| txHash | string | Yes | Transaction hash (0x-prefixed) |
| network | string | No | mainnet or testnet (default: mainnet) |
qelt_getTransactionReceipt
Get transaction receipt with execution status, gas used, and event logs. QELT transactions have immediate finality — once included in a block, they cannot be reverted.
| Parameter | Type | Required | Description |
|---|---|---|---|
| txHash | string | Yes | Transaction hash (0x-prefixed) |
| network | string | No | mainnet or testnet (default: mainnet) |
qelt_call
Execute a read-only smart contract call (eth_call). Does not create a transaction or cost gas. Used to read contract state.
| Parameter | Type | Required | Description |
|---|---|---|---|
| to | string | Yes | Contract address to call |
| data | string | Yes | ABI-encoded function call data (0x-prefixed hex) |
| from | string | No | Optional sender address for the call context |
| network | string | No | mainnet or testnet (default: mainnet) |
qelt_sendTransaction
Broadcast a signed raw transaction to QELT blockchain. The transaction must already be signed — this server does not hold any private keys.
| Parameter | Type | Required | Description |
|---|---|---|---|
| signedTx | string | Yes | Signed raw transaction hex (0x-prefixed) |
| network | string | No | mainnet or testnet (default: mainnet) |
Security: The MCP server never has access to private keys. Agents must sign transactions client-side before submitting. Finality in ~5 seconds (QBFT consensus).
qelt_estimateGas
Estimate gas for a transaction. QELT block gas limit is 50,000,000. Simple transfer costs 21,000 gas.
| Parameter | Type | Required | Description |
|---|---|---|---|
| to | string | Yes | Recipient or contract address |
| from | string | No | Sender address (recommended for accuracy) |
| data | string | No | Transaction data (0x hex, for contract calls) |
| value | string | No | Value in Wei (hex) |
| network | string | No | mainnet or testnet (default: mainnet) |
{
"success": true,
"data": {
"gasEstimate": "0x5208",
"gasEstimateDecimal": 21000
}
}qelt_getLogs
Get event logs from QELT blockchain with optional filters. Uses the archive node for historical queries.
| Parameter | Type | Required | Description |
|---|---|---|---|
| address | string | No | Contract address to filter logs from |
| topics | string[] | No | Event topic filters (array of hex-encoded topic hashes) |
| fromBlock | string | No | Start block (hex or "latest", "earliest") |
| toBlock | string | No | End block (hex or "latest") |
| network | string | No | mainnet or testnet (default: mainnet) |
qelt_getCode
Get bytecode at an address. Returns whether the address is a smart contract.
| Parameter | Type | Required | Description |
|---|---|---|---|
| address | string | Yes | Address to check (0x-prefixed) |
| network | string | No | mainnet or testnet (default: mainnet) |
{
"success": true,
"data": {
"code": "0x6080604052...",
"isContract": true
}
}qelt_getTransactionCount
Get the nonce (transaction count) for an address. Needed when building transactions for signing.
| Parameter | Type | Required | Description |
|---|---|---|---|
| address | string | Yes | Address to get nonce for |
| network | string | No | mainnet or testnet (default: mainnet) |
{
"success": true,
"data": {
"nonce": "0x5",
"nonceDecimal": 5
}
}Indexer Tools
REST API queries for the QELT Mainnet Indexer. Provides enriched blockchain data with faster response times than direct RPC. No authentication required.
https://mnindexer.qelt.aihttps://tnindexer.qelt.aiindexer_getLatestBlock
Get the most recent block with all transactions. More detailed than the RPC equivalent.
| Parameter | Type | Required | Description |
|---|---|---|---|
| network | string | No | mainnet or testnet (default: mainnet) |
indexer_getBlock
Get a block by number or hash.
| Parameter | Type | Required | Description |
|---|---|---|---|
| blockId | string | Yes | Block number (decimal) or block hash (0x-prefixed) |
| network | string | No | mainnet or testnet (default: mainnet) |
indexer_getBlocks
Get a paginated list of recent blocks.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| limit | number | No | 10 | Number of blocks to return |
| offset | number | No | 0 | Offset for pagination |
| network | string | No | mainnet | mainnet or testnet |
indexer_getTransaction
Get enriched transaction details by hash.
| Parameter | Type | Required | Description |
|---|---|---|---|
| hash | string | Yes | Transaction hash (0x-prefixed) |
| network | string | No | mainnet or testnet (default: mainnet) |
indexer_getTransactionReceipt
Get transaction receipt with logs and execution status.
| Parameter | Type | Required | Description |
|---|---|---|---|
| hash | string | Yes | Transaction hash (0x-prefixed) |
| network | string | No | mainnet or testnet (default: mainnet) |
indexer_getTransactionCount
Get blockchain sync status and latest indexed block.
| Parameter | Type | Required | Description |
|---|---|---|---|
| network | string | No | mainnet or testnet (default: mainnet) |
indexer_getAddressTransactions
Get all transactions for a specific address with pagination.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| address | string | Yes | — | Ethereum-compatible address (0x-prefixed) |
| limit | number | No | 10 | Number of transactions to return |
| offset | number | No | 0 | Offset for pagination |
| network | string | No | mainnet | mainnet or testnet |
indexer_getAddressTokens
Get all ERC20 token balances for an address.
| Parameter | Type | Required | Description |
|---|---|---|---|
| address | string | Yes | Ethereum-compatible address (0x-prefixed) |
| network | string | No | mainnet or testnet (default: mainnet) |
indexer_getAccountBalances
Get all balances for an address — both native QELT and all ERC20 tokens. Comprehensive portfolio view.
| Parameter | Type | Required | Description |
|---|---|---|---|
| address | string | Yes | Ethereum-compatible address (0x-prefixed) |
| network | string | No | mainnet or testnet (default: mainnet) |
QXMP Oracle Tools
Access to real-world asset (RWA) valuations, proof-of-reserve verification, and portfolio statistics from the QXMP Oracle. Currently managing $1.1 trillion in certified mining and resource assets.
https://api.qxmp.ai/api/v1/rwaoracle_getAssets
Get all RWA assets with valuations, proof-of-reserve status, and on-chain data. Primary endpoint for accessing QXMP Oracle data.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| page | number | No | 1 | Page number for pagination |
| limit | number | No | 100 | Items per page (max: 100) |
oracle_getAsset
Get full details for a single RWA asset including complete on-chain data and proof history.
| Parameter | Type | Required | Description |
|---|---|---|---|
| assetCode | string | Yes | Unique asset code (e.g. QXMP:RHENO-JORC-ZA) |
oracle_getStats
Get portfolio-level statistics: total value, average value, asset count, and breakdowns by asset type and jurisdiction.
No parameters required.
oracle_getHealth
Check the health of the QXMP Oracle API and its connection to the QELT blockchain.
No parameters required.
oracle_verifyProofOnChain
AdvancedVerify an oracle proof directly on the QELT blockchain by reading from the QXMPProofOfReserveV3 smart contract. Bypasses the REST API for trustless verification.
| Parameter | Type | Required | Description |
|---|---|---|---|
| assetCode | string | Yes | Human-readable asset code (will be keccak256 hashed) |
| dataFeedId | string | Yes | Data feed identifier (will be keccak256 hashed) |
Oracle Smart Contracts
| Contract | Address | Purpose |
|---|---|---|
| QXMPOracleController | 0xB2a332dE80923134393306808Fc2CFF330de03bA | Manages signers, verifies ECDSA signatures |
| QXMPProofOfReserveV3 | 0x6123287acBf0518E0bD7F79eAcAaFa953e10a768 | Stores proofs with audit trail |
| QXMPDynamicRegistryV2 | 0xd00cD3a986746cf134756464Cb9Eaf024DF110fB | Universal asset data storage |
Uniswap v4 Tools
Interact with the fully verified Uniswap v4 deployment on QELT Mainnet. All contracts verified on QELTScan. QELT only supports Uniswap V4 — V2 and V3 are not available.
uniswap_getContractAddresses
Get all Uniswap v4 contract addresses deployed on QELT Mainnet. No parameters required.
{
"poolManager": "0x11c23891d9f723c4f1c6560f892e4581d87b6d8a",
"universalRouter": "0x7d5AbaDb17733963a3e14cF8fB256Ee08df9d68A",
"positionManager": "0x1809116b4230794c823b1b17d46c74076e90d035",
"permit2": "0x403cf2852cf448b5de36e865c5736a7fb7b25ea2",
"wqelt": "0xfebc6f9f0149036006c4f5ac124685e0ef48e8a2",
"positionDescriptor": "0x9bb9a0bac572ac1740eeadbedb97cddb497c57f0",
"unsupportedProtocol": "0xe4F095537EB1b0dd9C244e827B3E35171d5c2A6E"
}uniswap_getPoolState
Get the current state of a Uniswap v4 pool including price, tick, fees, and liquidity.
| Parameter | Type | Required | Description |
|---|---|---|---|
| token0 | string | Yes | Address of token0 (numerically smaller) |
| token1 | string | Yes | Address of token1 (numerically larger) |
| fee | number | Yes | Fee tier (e.g. 3000 = 0.3%) |
| tickSpacing | number | Yes | Tick spacing (e.g. 60 for 0.3% fee) |
| hooks | string | No | Hooks contract address (default: 0x000...000) |
uniswap_getPositionInfo
Query a Uniswap v4 liquidity position by its NFT token ID. Returns pool key, tick range, liquidity amount, and owed tokens/fees.
| Parameter | Type | Required | Description |
|---|---|---|---|
| tokenId | string | Yes | Position NFT token ID (decimal number) |
Write Tools (Require Pre-signed Transactions)
All write operations require a fully signed raw transaction hex. The MCP server never holds private keys.
| Tool | Target Contract | Description |
|---|---|---|
| uniswap_executeSwap | UniversalRouter | Execute a token swap |
| uniswap_addLiquidity | PositionManager | Add liquidity to a pool |
| uniswap_removeLiquidity | PositionManager | Remove liquidity from a position |
| uniswap_collectFees | PositionManager | Collect accrued trading fees |
| uniswap_wrapQELT | WQELT | Wrap native QELT to WQELT (ERC20) |
| uniswap_unwrapQELT | WQELT | Unwrap WQELT back to native QELT |
Write Tool Response (all Uniswap write tools)
{
"success": true,
"data": {
"txHash": "0x1234...abcd",
"message": "Transaction broadcast successfully. Finality in ~5 seconds (QBFT consensus).",
"explorer": "https://qeltscan.ai/tx/0x1234...abcd"
}
}Contract Verification Tools
Submit and query verified smart contracts on QELT. Uses the indexer verification API. Rate limit: 10 verification submissions per hour. Status polling is unlimited.
contract_submitVerification
Submit a single-file smart contract for verification.
| Parameter | Type | Required | Description |
|---|---|---|---|
| address | string | Yes | Deployed contract address (0x-prefixed) |
| sourceCode | string | Yes | Full Solidity source code |
| compilerVersion | string | Yes | Compiler version (e.g. 0.8.20) |
| contractName | string | Yes | Name of the contract to verify |
| optimizationUsed | boolean | No | Whether optimizer was enabled (default: false) |
| runs | number | No | Optimizer runs (default: 200) |
| evmVersion | string | No | EVM version (auto-detect by default) |
| constructorArguments | string | No | ABI-encoded constructor arguments (0x hex) |
| network | string | No | mainnet or testnet (default: mainnet) |
contract_submitMultiVerification
Submit a multi-file smart contract for verification. For contracts with imports (OpenZeppelin, etc.). Supports 75+ source files.
| Parameter | Type | Required | Description |
|---|---|---|---|
| address | string | Yes | Deployed contract address |
| sourceFiles | object | Yes | Map of file paths to source code |
| mainFile | string | Yes | Path to the main contract file |
| compilerVersion | string | Yes | Compiler version |
| contractName | string | Yes | Contract name |
| viaIR | boolean | No | Whether viaIR compilation was used (default: false) |
contract_getVerificationStatus
Check the status of a contract verification job. Poll every 3-5 seconds.
| Parameter | Type | Required | Description |
|---|---|---|---|
| jobId | string | Yes | Verification job UUID |
| network | string | No | mainnet or testnet (default: mainnet) |
Important: Always check result.verified === true. A job can complete without verification if there's a bytecode mismatch.
contract_getVerifiedContract
Get verification details for a verified contract including source code and ABI.
| Parameter | Type | Required | Description |
|---|---|---|---|
| address | string | Yes | Contract address (0x-prefixed) |
| network | string | No | mainnet or testnet (default: mainnet) |
contract_getCompilerVersions
List all available Solidity compiler versions (500+ versions from 0.4.11 to latest).
contract_getEvmVersions
List all supported EVM versions for contract verification.
EVM Version Compatibility
| EVM Version | Solidity Versions |
|---|---|
| cancun | 0.8.24+ |
| shanghai | 0.8.20 – 0.8.23 |
| paris | 0.8.18 – 0.8.19 |
| london | 0.8.6 – 0.8.17 |
| berlin | 0.8.5 – 0.8.6 |
| istanbul | 0.5.14 – 0.8.4 |
Network Info Tools
Static and dynamic network configuration data.
network_getInfo
Get comprehensive QELT network information including chain ID, block time, consensus, EVM version, gas limits, validators, and performance metrics.
| Parameter | Type | Required | Description |
|---|---|---|---|
| network | string | No | mainnet or testnet (default: mainnet) |
network_getEndpoints
Get all RPC, WebSocket, indexer, explorer, and faucet endpoints.
| Parameter | Type | Required | Description |
|---|---|---|---|
| network | string | No | mainnet or testnet (default: mainnet) |
network_getHealth
Check the health of the QELT Indexer including sync status and block lag.
network_getMetaMaskConfig
Get a MetaMask-compatible network configuration JSON.
{
"chainId": "0x302",
"chainName": "QELT Mainnet",
"nativeCurrency": {
"name": "QELT",
"symbol": "QELT",
"decimals": 18
},
"rpcUrls": ["https://mainnet.qelt.ai"],
"blockExplorerUrls": ["https://qeltscan.ai"]
}Resources
MCP Resources are static or semi-static data that agents can read without invoking tools. They provide reference information like network configurations, contract addresses, and API documentation.
| URI | Name | Description |
|---|---|---|
| qelt://network/mainnet | QELT Mainnet Config | Chain ID 770, RPC endpoints, explorer, technical specs |
| qelt://network/testnet | QELT Testnet Config | Chain ID 771, RPC, WebSocket, faucet, explorer |
| qelt://contracts/uniswap-v4 | Uniswap v4 Addresses | All 7 verified contract addresses with purposes |
| qelt://contracts/oracle | QXMP Oracle Addresses | Controller, ProofOfReserve, Registry contracts |
| qelt://docs/blockchain | Blockchain Technical Specs | Full technical specifications and performance metrics |
| qelt://docs/indexer-api | Indexer API Reference | All REST endpoints, rate limits, and usage |
| qelt://docs/oracle-api | Oracle API Reference | QXMP Oracle endpoints, asset types, proof fields |
| qelt://docs/uniswap | Uniswap v4 Guide | Contracts, swap flow, WQELT, fee tiers |
| qelt://docs/contract-verification | Verification Guide | CLI tool, Hardhat plugin, API, EVM versions |
Prompts
Guided multi-step workflows that help AI agents accomplish complex tasks. Prompts provide structured instructions with recommended tool sequences.
verify_rwa_reserves
Verify real-world asset reserves using the QXMP Oracle. Checks asset valuation, proof freshness, and optionally verifies on-chain.
Arguments: assetCode (optional) — Asset code to verify. Leave empty to see all assets.
Workflow:
- Fetch asset details from QXMP Oracle
- Check proof freshness (isFresh field)
- Display USD valuation, type, jurisdiction
- Optionally verify on-chain for trustless confirmation
swap_tokens
Execute a token swap on Uniswap v4 on QELT Mainnet.
Arguments: tokenIn (required), tokenOut (required), amount (required)
Workflow:
- Get Uniswap v4 contract addresses
- Wrap QELT to WQELT if needed
- Check pool state for the token pair
- Approve tokens to Permit2
- Build and sign the swap transaction
- Submit via uniswap_executeSwap
check_portfolio
Comprehensive portfolio overview for an address.
Arguments: address (required)
Workflow:
- Get all balances (native QELT + tokens)
- Get recent transactions (last 10)
- Get nonce (total outgoing transactions)
- Check if address is contract or EOA
explore_transaction
Deep-dive into a transaction on QELT.
Arguments: txHash (required)
Workflow:
- Get transaction details (from, to, value, gas)
- Get receipt (status, gasUsed, logs)
- Check if destination is a contract
- Display with explorer link
deploy_and_verify
Deploy and verify a smart contract on QELT.
Arguments: contractName (required), network (optional, default: testnet)
Workflow:
- Get network info and MetaMask config
- Estimate gas and deploy contract
- Wait for confirmation (~5 seconds)
- Submit for verification
- Poll status until complete
- Confirm on explorer
Architecture
System Architecture
┌────────────────────────┐
│ AI Agent │
│ (Claude, Cursor, etc) │
└──────────┬─────────────┘
│ MCP Protocol (stdio or HTTP/SSE)
▼
┌────────────────────────┐
│ @qelt/mcp-server │
│ │
│ ┌──────────────────┐ │
│ │ Tool Router │ │
│ │ (44 tools) │ │
│ └────────┬─────────┘ │
│ │ │
│ ┌────────▼─────────┐ │
│ │ Cache Layer │ │
│ │ (TTL-based) │ │
│ └────────┬─────────┘ │
│ │ │
│ ┌────────▼─────────┐ │
│ │ Retry + Backoff │ │
│ │ (rate-limit aware)│ │
│ └────────┬─────────┘ │
└───────────┼─────────────┘
│
┌──────┼──────┬───────────┐
▼ ▼ ▼ ▼
┌────────┐┌──────┐┌────────┐┌──────────┐
│ QELT ││QELT ││ QXMP ││ On-Chain │
│ RPC ││Indexer││ Oracle ││ Contracts│
│ Nodes ││ API ││ API ││ │
└────────┘└──────┘└────────┘└──────────┘Caching Strategy
| Data Source | Cache TTL | Rationale |
|---|---|---|
| Oracle assets/stats | 5 minutes | Proofs update ~once/day |
| Oracle health | 30 seconds | Health should be relatively fresh |
| Latest block | 5 seconds | Matches QELT block time |
| Historical blocks/txs | 10 minutes | Immutable data never changes |
| Counters | 30 seconds | Slowly changing values |
| Static data | 1 hour | Configs, compiler versions rarely change |
Rate Limit Awareness
| Upstream | Rate Limit | Server Behavior |
|---|---|---|
| QELT Indexer (standard) | 120 req/min | Tracks request count, queues excess |
| QELT Indexer (heavy) | 60 req/min | Routes heavy queries carefully |
| QXMP Oracle | HTTP 429 | Exponential backoff with 3 retries |
| Contract Verification | 10 req/hour | Queues and warns agents about limits |
| QELT RPC endpoints | No limit | Reasonable pacing, failover across validators |
Error Response Format
{
"success": false,
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded. Try again in 60 seconds.",
"retryAfter": 60
}
}| Code | Description |
|---|---|
| RATE_LIMITED | Upstream rate limit exceeded. Check retryAfter field. |
| UPSTREAM_ERROR | Error from QELT RPC, indexer, or oracle API |
| INVALID_PARAMS | Missing or invalid tool parameters |
| NETWORK_ERROR | Network connectivity issue |
| NOT_FOUND | Requested resource not found (block, tx, address, etc.) |
Security
Stateless Architecture
| Security Property | Status | Details |
|---|---|---|
| Private Key Storage | ❌ Never | Server never stores, manages, or accesses private keys |
| Pre-signed Transactions | ✅ Required | All write operations accept already-signed raw transaction hex |
| Authentication | ✅ None needed | All upstream APIs (RPC, indexer, oracle) are public |
| Data Storage | ❌ None | No databases, no persistent state, no user data |
| Secrets | ❌ None | No API keys, tokens, or credentials needed |
Best Practices for Agent Developers
- Never expose private keys to the MCP server
- Verify tool responses — check
success === truebefore acting on data - Handle rate limits — implement retry logic when
error.code === "RATE_LIMITED" - Cache oracle data — proofs update ~once per day, so aggressive caching is safe
- Use testnet first — set
network: "testnet"during development - Monitor proof freshness — check
latestProof.isFreshwhen making decisions based on oracle data
Network Reference
| Parameter | Mainnet | Testnet |
|---|---|---|
| Chain ID | 770 (0x302) | 771 (0x303) |
| Native Token | QELT (18 decimals) | QELT (18 decimals) |
| Block Time | 5 seconds | 5 seconds |
| Consensus | QBFT (5 validators) | QBFT |
| Gas Fees | Zero base fee (~$0.002/tx) | Free |
| EVM Version | Cancun | Cancun |
| Client | Besu 25.12.0 | Besu 25.12.0 |
| Finality | Immediate (QBFT) | Immediate |
| RPC | https://mainnet.qelt.ai | https://testnet.qelt.ai |
| Archive RPC | https://archivem.qelt.ai | https://archive.qelt.ai |
| Indexer | https://mnindexer.qelt.ai | https://tnindexer.qelt.ai |
| Explorer | https://qeltscan.ai | https://testnet.qeltscan.ai |
| Faucet | — | https://testnet.qeltscan.ai/faucet |
Changelog
- Fixed indexer_getTransactionCount fallback for indexer API compatibility
- All 28 E2E tests passing against live QELT APIs
- Initial release — 44 tools across 6 categories
- 9 resources with complete documentation
- 5 guided workflow prompts
- Dual transport (stdio + HTTP/SSE)
- Built-in caching and retry logic
- Zero-config setup via npx @qelt/mcp-server
Next Steps
Ready to integrate AI agents with QELT? Install via npx and start building.
