Substrate MCP Server
Um servidor Model Context Protocol (MCP) para blockchains Substrate, escrito em Rust.
Documentação
Servidor MCP Substrate
Um servidor Model Context Protocol (MCP) para blockchains Substrate, escrito em Rust. Este projeto expõe operações dinâmicas de blockchain Substrate (consulta de saldos, blocos, pallets, storage, eventos e muito mais) via protocolo MCP, e é totalmente configurável por meio de variáveis de ambiente.
Projetado para interfacear com a crate subxt.
✨ Recursos
- Consultar saldos de contas e storage dinamicamente
- Listar pallets e suas entradas
- Buscar e filtrar eventos e extrínsecos
- Enviar e acompanhar transações assinadas dinâmicas
- Acessar informações do sistema e de blocos
- Chamadas RPC personalizadas para nós Substrate
🚀 Casos de Uso Potenciais
-
Operações de Blockchain Orientadas por IA
- Integrar com LLMs (como Cursor ou Claude) para permitir que usuários façam perguntas em linguagem natural (ex.: "Qual foi a última transferência da Alice?"), que são traduzidas em chamadas de ferramentas MCP.
- Construir um chatbot que possa responder perguntas, buscar saldos ou explicar atividades on-chain usando seu servidor MCP como backend.
- Usar o servidor MCP para fornecer atualizações ao vivo da atividade on-chain, como mudanças de saldo ou status de transações, para ferramentas de desenvolvimento como VSCode, Cursor, Claude Code, etc.
-
Dashboards Personalizados e Monitoramento
- Criar dashboards personalizados e sistemas de monitoramento para sua blockchain Substrate
- Exibir dados e análises em tempo real das operações da sua blockchain
- Configurar alertas e notificações para eventos críticos
- Usar agentes de IA para detectar atividades suspeitas analisando eventos e extrínsecos em tempo real.
🛠️ Requisitos
- Rust
- Acesso a um endpoint de nó Substrate (WebSocket)
- Um keypair de assinatura válido (em hex)
- Arquivo de metadados de runtime para sua chain alvo (veja abaixo para nomeação e posicionamento)
📦 Instalação
Clone o repositório e compile:
git clone https://github.com/ThomasMarches/substrate-mcp-rs.git
cd substrate-mcp-rs
cargo build --release
⚙️ Configuração
Crie um arquivo .env na raiz do projeto com as seguintes variáveis:
# WebSocket endpoint for the Substrate node
RPC_URL=wss://your-node-url.example.com
# Signing keypair as hex (32 bytes, e.g. output of subkey inspect-key --scheme Sr25519)
SIGNING_KEYPAIR_HEX=your_signing_keypair_hex_here
Gerando um Keypair de Assinatura
Você pode gerar um keypair e obter a seed secreta em hex usando subkey:
subkey generate --scheme Sr25519 --output-type Json
Use o campo secretSeed (remova o prefixo 0x se presente) para SIGNING_KEYPAIR_HEX.
Obtendo e Posicionando Metadados de Runtime
Exporte os metadados de runtime do seu nó e coloque-os em artifacts/metadata.scale:
subxt metadata -f bytes > artifacts/metadata.scale
Importante: O arquivo deve ser nomeado metadata.scale e localizado no diretório artifacts/ antes da compilação. A compilação falhará se este arquivo estiver ausente ou com nome incorreto.
▶️ Uso
Para iniciar o servidor MCP:
cargo run --release
O servidor iniciará e escutará solicitações MCP via stdio.
🖇️ Integração com Cursor
Para usar este servidor MCP com Cursor, você precisa adicioná-lo à configuração MCP do Cursor. Isso permite que o Cursor descubra e interaja com seu servidor MCP Substrate.
-
Compile seu servidor em modo release:
cargo build --release -
Localize o caminho para o binário compilado (tipicamente
target/release/substrate-mcp-rs). -
No arquivo
.cursor/mcp.jsondo seu projeto (ou global), adicione uma entrada para seu servidor. Por exemplo:{ "mcpServers": { "substrate-mcp-rs": { "command": "$PROJECT_ROOT_ABSOLUTE_PATH/target/release/substrate-mcp-rs", "args": [] } } }- Substitua o caminho
commandpelo caminho absoluto para seu binário compilado se for diferente.
- Substitua o caminho
-
Reinicie o Cursor. Ele agora deve detectar e conectar ao seu servidor MCP Substrate, disponibilizando suas ferramentas para uso.
Para mais detalhes, veja a documentação do Cursor ou a introdução ao Model Context Protocol.
🧰 Ferramentas Disponíveis
O servidor expõe um conjunto de ferramentas para interagir com uma blockchain Substrate, incluindo:
query_balance: Buscar o saldo de uma contalist_pallets: Listar todos os pallets no runtimelist_pallet_entries: Listar todas as entradas de storage de um palletdynamic_runtime_call: Executar uma chamada de API de runtimesend_dynamic_signed_transaction: Construir, assinar e enviar uma transaçãoquery_storage: Consultar storage por pallet e entradaget_latest_events: Obter todos os eventos do bloco mais recentefind_events: Encontrar eventos específicos por pallet e varianteget_latest_block: Obter detalhes sobre o bloco mais recenteget_block_by_hash: Obter detalhes do bloco por hashfind_extrinsics: Encontrar extrínsecos no bloco mais recenteget_system_info: Obter informações do sistema via RPCcustom_rpc: Fazer uma chamada RPC personalizada
Veja src/tooling/substrate.rs para detalhes completos e parâmetros.
🗂️ Estrutura do Projeto
src/main.rs: Ponto de entrada, configura logging e inicia o servidor MCPsrc/tooling/: Contém a implementação das ferramentas Substrateartifacts/: Coloque seu arquivo de metadados de runtime aqui comometadata.scale(necessário antes da compilação)
📈 Próximos Passos e Metas
- Adicionar testes E2E
- Adicionar testes unitários
- Adicionar mais ferramentas
🤝 Contribuindo
Contribuições são bem-vindas! Por favor, abra issues ou pull requests. Para mudanças maiores, abra uma issue primeiro para discutir sua proposta.
- Siga as boas práticas de Rust e garanta que o código esteja documentado
- Execute
cargo fmtecargo clippyantes de enviar - Adicione testes quando possível
📄 Licença
MIT