Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 53 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# @missionsquad/mcp-evm

MCP server for Ethereum Virtual Machine (EVM) RPC APIs, powered by `evmdecoder` and `@missionsquad/fastmcp`.
MCP server for Ethereum Virtual Machine (EVM) RPC APIs, powered by `evmdecoder`.

This server exposes curated EVM read/decoding tools for LLM clients while keeping RPC endpoints hidden from tool schemas.

Expand Down Expand Up @@ -41,6 +41,25 @@ Notes:
- High-volume/batch tools and raw processing utilities are intentionally not exposed.
- `evm_get_pending_transactions` defaults to `decode: false` to reduce response size.

## Sample Data

Sample payloads for a subset of tools are available in [`sample-data/`](sample-data/).
Not every tool currently has sample data.

Available samples:

- `evm_contract_info`: [`sample-data/evm_contract_info.json`](sample-data/evm_contract_info.json)
- `evm_decode_function_call`: [`sample-data/evm_decode_function_call.json`](sample-data/evm_decode_function_call.json)
- `evm_decode_function_call_v2`: [`sample-data/evm_decode_function_call_v2.json`](sample-data/evm_decode_function_call_v2.json)
- `evm_get_block`:
- decoded: [`sample-data/evm_get_block(decode).json`](sample-data/evm_get_block%28decode%29.json)
- raw: [`sample-data/evm_get_block(raw).json`](sample-data/evm_get_block%28raw%29.json)
- `evm_get_slim_block`: [`sample-data/evm_get_slim_block.json`](sample-data/evm_get_slim_block.json)
- `evm_get_transaction`: [`sample-data/evm_get_transaction.json`](sample-data/evm_get_transaction.json)
- `evm_get_transaction_receipt`: [`sample-data/evm_get_transaction_receipt.json`](sample-data/evm_get_transaction_receipt.json)
- `evm_get_internal_transaction`: [`sample-data/evm_get_internal_transaction.json`](sample-data/evm_get_internal_transaction.json)
- `evm_get_fee_history`: [`sample-data/get_fee_history.json`](sample-data/get_fee_history.json)

## Requirements

- Node.js `>=20`
Expand Down Expand Up @@ -120,33 +139,49 @@ Parameters:
- `input: string`
- `address?: string`

Sample:
- [`sample-data/evm_decode_function_call.json`](sample-data/evm_decode_function_call.json)

### `evm_decode_function_call_v2`
Decode function input and include contract info.

Parameters:
- `input: string`
- `address?: string`

Sample:
- [`sample-data/evm_decode_function_call_v2.json`](sample-data/evm_decode_function_call_v2.json)

### `evm_contract_info`
Classify/inspect a contract address.

Parameters:
- `address: string`

Sample:
- [`sample-data/evm_contract_info.json`](sample-data/evm_contract_info.json)

### `evm_get_block`
Get block with decoded transactions by default.

Parameters:
- `blockNumber: number`
- `decode?: boolean` (default `true`)

Samples:
- decoded: [`sample-data/evm_get_block(decode).json`](sample-data/evm_get_block%28decode%29.json)
- raw: [`sample-data/evm_get_block(raw).json`](sample-data/evm_get_block%28raw%29.json)

### `evm_get_slim_block`
Get slim block.

Parameters:
- `blockNumber: number`
- `raw?: boolean` (default `true`)

Sample:
- [`sample-data/evm_get_slim_block.json`](sample-data/evm_get_slim_block.json)

### `evm_get_slim_block_by_hash`
Get slim block by hash.

Expand Down Expand Up @@ -181,20 +216,29 @@ Parameters:
- `hash: string`
- `decode?: boolean` (default `true`)

Sample:
- [`sample-data/evm_get_transaction.json`](sample-data/evm_get_transaction.json)

### `evm_get_transaction_receipt`
Get transaction receipt.

Parameters:
- `hash: string`
- `decode?: boolean` (default `true`)

Sample:
- [`sample-data/evm_get_transaction_receipt.json`](sample-data/evm_get_transaction_receipt.json)

### `evm_get_internal_transaction`
Get internal trace for one transaction.

Parameters:
- `hash: string`
- `decode?: boolean` (default `true`)

Sample:
- [`sample-data/evm_get_internal_transaction.json`](sample-data/evm_get_internal_transaction.json)

### `evm_get_internal_transactions_by_block`
Get internal traces by block number.

Expand All @@ -209,6 +253,9 @@ Parameters:
- `blockCount: number`
- `blockTarget: number`

Sample:
- [`sample-data/get_fee_history.json`](sample-data/get_fee_history.json)

### `evm_get_latest_block_number`
Get latest block number.

Expand Down Expand Up @@ -333,6 +380,11 @@ If you want local ABI matching, set `EVM_ABI_DIRECTORY` to an existing folder or
### Large responses
Use slim/single-item tools and keep decode flags intentional. `evm_get_pending_transactions` defaults to `decode: false` for this reason.

## About Mission Squad

[Mission Squad](https://missionsquad.ai) provides a platform for building and running AI agents with production-ready tooling, including MCP server integrations like this one.
You can configure MCP servers, connect external systems, and create specialized agents quickly without rebuilding core infrastructure each time.

## License

MIT
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@missionsquad/mcp-evm",
"version": "1.0.0",
"version": "1.0.1",
"description": "MCP server for Ethereum Virtual Machine (EVM) RPC API",
"type": "module",
"main": "dist/index.js",
Expand Down
19 changes: 19 additions & 0 deletions sample-data/evm_contract_info.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"isContract": true,
"fingerprint": "4c2215438ccc25df21a97a961c524dc85b7e99566b45f1b96ad34f36e07f716e",
"contractType": {
"name": "NFT",
"metadata": true,
"baseUri": false,
"enumeration": true,
"tokenUri": true,
"receive": ["ERC721"],
"standards": ["ERC721"]
},
"properties": {
"type": "ERC721",
"name": "PudgyPenguins",
"symbol": "PPG",
"totalSupply": "8888"
}
}
38 changes: 38 additions & 0 deletions sample-data/evm_decode_function_call.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"name": "swapExactETHForTokens",
"signature": "swapExactETHForTokens(uint256,address[],address,uint256)",
"params": [
{
"name": "amountOutMin",
"type": "uint256",
"value": "244350857220037158969430063"
},
{
"name": "path",
"type": "address[]",
"value": [
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"0x300fE9C923c41A29a4D68c72CA86f2c09c93a8b4"
]
},
{
"name": "to",
"type": "address",
"value": "0xBF334390485D31e37D9942306cdb692c0e1DB5C4"
},
{
"name": "deadline",
"type": "uint256",
"value": 1770877933
}
],
"args": {
"amountOutMin": "244350857220037158969430063",
"path": [
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"0x300fE9C923c41A29a4D68c72CA86f2c09c93a8b4"
],
"to": "0xBF334390485D31e37D9942306cdb692c0e1DB5C4",
"deadline": 1770877933
}
}
50 changes: 50 additions & 0 deletions sample-data/evm_decode_function_call_v2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
{
"decoded": {
"name": "transferFrom",
"signature": "transferFrom(address,address,uint256)",
"params": [
{
"name": "_from",
"type": "address",
"value": "0x2175A9B41B65767aeD00AD1137932CbbdCf041b6"
},
{
"name": "_to",
"type": "address",
"value": "0xa41887170Fd5d1591095398F15d89b8c55bA8416"
},
{
"name": "_value",
"type": "uint256",
"value": 9488
}
],
"args": {
"_from": "0x2175A9B41B65767aeD00AD1137932CbbdCf041b6",
"_to": "0xa41887170Fd5d1591095398F15d89b8c55bA8416",
"_value": 9488
},
"extra": {
"tokenUri": "https://boredapeyachtclub.com/api/mutants/9488"
}
},
"contractInfo": {
"isContract": true,
"fingerprint": "8747190d7a0cad8a0d72e938d5016550cb26a63c464ece437ac7be97be776f76",
"contractType": {
"name": "NFT",
"metadata": true,
"baseUri": false,
"enumeration": true,
"tokenUri": true,
"receive": ["ERC721"],
"standards": ["ERC721"]
},
"properties": {
"type": "ERC721",
"name": "MutantApeYachtClub",
"symbol": "MAYC",
"totalSupply": "19558"
}
}
}
Loading