🌐 PortalMCP
Puerta de enlace de IA universal para Ethereum
Un servidor. Toda IA. Toda la cadena.
Conecta cualquier cliente del Protocolo de Contexto de Modelo (MCP) — Claude, ChatGPT, Gemini, Cursor, Windsurf, Cline, agentes personalizados — a Ethereum con lenguaje natural. Consulta saldos, intercambia tokens, acuña NFT, genera y despliega contratos inteligentes.
👁 MCP SDK
👁 Ethers
👁 TypeScript
👁 License
👁 Release
Inicio rápido · Configuración · Herramientas · Hoja de ruta · Registro de cambios
✨ Por qué PortalMCP
La mayoría de las integraciones de IA y blockchain te limitan a un LLM o un cliente. PortalMCP es un servidor MCP que cumple con las especificaciones: el mismo servidor, ejecutándose localmente o en tu VPS, potencia a cada cliente compatible con MCP.
🔐 Sin custodia — las claves privadas nunca abandonan tu máquina 🛰️ Contexto de cadena en vivo — los recursos transmiten saldos de ETH, recibos de transacciones y metadatos de tokens directamente a tu chat 🛡️ Seguridad primero — cada herramienta declara sugerencias de lectura/destructivas/idempotentes para que los clientes puedan confirmar antes de transmitir 🧩 Universal — funciona tanto sobre stdio como HTTP, interactúa con todos los clientes MCP existentes
Related MCP server: MCP Crypto Wallet EVM
🧭 Clientes compatibles
Cliente | Transporte | Notas |
🟣 Claude Desktop (macOS/Windows) | stdio | Configuración rápida abajo |
🌐 Claude.ai web + móvil | HTTP | Añadir como Conector personalizado (Pro/Team/Enterprise) |
💻 Claude Code / CLI | cualquiera | |
🧠 Cursor · Windsurf · Cline · Continue · Zed AI | stdio | MCP nativo |
💬 ChatGPT (Team/Enterprise) | HTTP | Conector MCP |
🛠️ ChatGPT Custom GPTs | REST | Usa |
✴️ Google Gemini / Vertex Agents | HTTP | Conector MCP |
🐍 LangChain · LlamaIndex · OpenAI Agents SDK | cualquiera | vía sus adaptadores MCP |
🤖 Cualquier agente HTTP | HTTP | JSON-RPC plano + SSE en |
🎯 Qué puede hacer
⚡ General
Herramienta | Acción |
| Saldo de ETH de cualquier dirección o la billetera predeterminada |
| Llamada de solo lectura contra cualquier contrato + ABI |
| Preparar una transacción genérica sin firmar |
📜 Contratos inteligentes
Herramienta | Acción |
| Solidity escrito por Claude desde lenguaje natural |
| Compilación solc → bytecode + ABI |
| Preparar tx de despliegue para firma de billetera externa |
| Desplegar directamente usando |
🪙 Tokens ERC-20
Herramienta | Acción |
| Generar Solidity ERC-20 |
| Saldo ERC-20 de cualquier poseedor |
| Transferencia firmada o preparación de tx sin firmar |
🖼️ NFT ERC-721
Herramienta | Acción |
| Generar Solidity ERC-721 |
| Preparar |
| Búsqueda |
🏦 DeFi
Herramienta | Acción |
| Generar Solidity de staking |
| Preparar txs de aprobación + staking |
| Intercambio universal Uniswap V3 (cualquier par ERC-20) |
| Alias de conveniencia del anterior |
URI | Devuelve |
| Dirección del firmante configurado, red, saldo de ETH |
| Saldo de ETH en vivo para cualquier dirección |
| Transacción + recibo (estado, gas, bloque, registros, URL del explorador) |
| Metadatos ERC-20 (nombre, símbolo, decimales, suministro total) |
/swap_tokens— flujo guiado de intercambio de tokens/deploy_erc20— generar → compilar → desplegar de extremo a extremo
🚀 Inicio rápido
git clone https://github.com/PortalFnd/PortalMCP.git
cd PortalMCP/portalmcp
npm install
cp .env.example .env
# fill in .env — ANTHROPIC_API_KEY, DEPLOYER_PRIVATE_KEY,
# and ETHEREUM_RPC_URL (or a real ALCHEMY_API_KEY)
npm run build
npm run smoke # ✓ 17 tools / 1 resource / 3 templates / 2 prompts
npm start # stdio (Claude Desktop, Cursor, …)
# or
npm run start:http # Streamable HTTP on http://0.0.0.0:3333/mcp🔌 Configuración del cliente
Edita ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"portalmcp": {
"command": "node",
"args": ["/absolute/path/to/PortalMCP/portalmcp/dist/index.js"],
"env": {
"ETHEREUM_NETWORK": "mainnet",
"ETHEREUM_RPC_URL": "https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY",
"DEPLOYER_PRIVATE_KEY": "0x...",
"ANTHROPIC_API_KEY": "sk-ant-..."
}
}
}
}Reinicia Claude Desktop. 17 herramientas, recursos eth:// y dos comandos de barra aparecerán automáticamente.
Aloja el servidor HTTP con una URL HTTPS pública (Caddy / Cloudflare Tunnel / Nginx).
Configura
MCP_HTTP_TOKEN=<cadena-larga-aleatoria>para que solo tú puedas llamarlo.En Claude.ai → Settings → Connectors → Add Custom Connector:
URL:
https://your-host.example.com/mcpAuth:
Authorization: Bearer <MCP_HTTP_TOKEN>
Funciona tanto en la web como en la aplicación móvil.
Todos hablan MCP de forma nativa. Añade una entrada a su configuración MCP apuntando a:
node /absolute/path/to/PortalMCP/portalmcp/dist/index.js(El mismo comando stdio que Claude Desktop.)
Preferido — Conector MCP (ChatGPT Team/Enterprise, Gemini/Vertex Agents):
Apunta a https://your-host/mcp, opcionalmente con un token Bearer.
REST heredado (Acciones de GPT personalizadas de ChatGPT o cualquier agente HTTP):
npm run start:api
# OpenAPI spec: http://localhost:3001/openapi.json💬 Conversaciones de ejemplo
Desplegar un token desde cero
"Despliega un ERC-20 llamado PortalToken (PRTL) con un suministro inicial de 1,000,000."
→
eth_generate_contract→ muestra código →eth_compile_contract→eth_deploy_contract_with_signer→ devuelve la dirección del contrato + enlace a Etherscan.
Intercambio universal
"Intercambia 0.01 ETH por USDC."
→
eth_swap_tokens { tokenIn:"ETH", tokenOut:"USDC", amount:"0.01" }— aprueba (si es necesario) y ejecuta vía Uniswap V3.
Contexto en cadena en vivo
"¿Cuál es el saldo de
vitalik.eth?"→ el cliente adjunta el recurso
eth://balance/0xd8dA…directamente a la conversación.
⚙️ Configuración
Todo mediante variables de entorno (archivo .env o entorno del host). Lista completa en .env.example.
Var | Requerido | Propósito |
| – |
|
| ⭐ | URL JSON-RPC completa — sobrescribe la configuración de clave Infura/Alchemy |
| alt | Solo clave — PortalMCP construye la URL moderna |
| alt | ID de proyecto Infura |
| escrituras | Hexadecimal prefijado con |
| generar | Para |
| – | Sobrescribir el predeterminado |
| – | Predeterminado |
| – | Predeterminado |
| 🛡️ | Token Bearer para el transporte HTTP |
| – | Predeterminado |
💡 Detección de marcadores de posición — cualquier valor de entorno que comience con
your_,changeme,xxx,placeholder,<…>se trata como no configurado. Detiene configuraciones erróneas silenciosas.
🌍 Redes compatibles
🛡️ Seguridad
🚫 Nunca subas
.env— ya está en.gitignore.🔑
DEPLOYER_PRIVATE_KEYes un arma cargada. Usa una billetera de agente dedicada solo con fondos que puedas permitirte perder.🛰️ Configura siempre
MCP_HTTP_TOKENal exponer HTTP más allá de localhost, y coloca TLS (Caddy/Cloudflare) delante.🧪 Primero testnet — usa
sepoliapara desarrollo, mainnet solo después de haber verificado el flujo.🏷️ Las anotaciones de herramientas permiten a los clientes preguntar antes de txs destructivas — no las apruebes automáticamente.
👀 Revisa el Solidity generado —
eth_generate_contractes un punto de partida, no una auditoría.
🧑💻 Desarrollo
npm install
npm run dev # stdio, ts-node hot-reload
npm run dev:http # HTTP, ts-node
npm run build # tsc → dist/
npm run smoke # assert MCP surface is registered
npm test # JestScript | Propósito |
| Servidor MCP stdio (prod) |
| Servidor MCP HTTP transmitible (prod) |
| REST heredado para acciones de ChatGPT / clientes HTTP |
| Prueba de humo de registro — ideal para CI |
Diseño del repositorio
portalmcp/
├── src/
│ ├── index.ts # stdio entrypoint
│ ├── mcp-http.ts # Streamable HTTP entrypoint
│ ├── server-factory.ts # createPortalServer() — shared wiring
│ ├── smoke-test.ts # CI registration check
│ ├── tools/ # general · contracts · defi · tokens · nfts
│ ├── blockchain/ # EthereumService · CompilerService
│ ├── claude/ # ContractGenerator (Anthropic SDK)
│ ├── contracts/ # Solidity templates
│ └── adapters/ # Legacy REST / LangChain / OpenAI adapters
├── dist/ # tsc output
├── .env.example
└── package.json🏗️ Arquitectura
stdio Streamable HTTP (SSE)
┌─────────────────────┐ ┌─────────────────────────────┐
│ Claude Desktop │ │ Claude.ai web + mobile │
│ Cursor · Windsurf │ │ ChatGPT · Gemini │
│ Cline · Continue │ │ Custom agents │
└─────────┬───────────┘ └──────────────┬──────────────┘
│ │
│ ┌──────────────────────┐ │
└───────▶│ PortalMCP server │◀────────────┘
│ (server-factory.ts) │
└──────────┬───────────┘
│
┌──────────────────────┼──────────────────────┐
▼ ▼ ▼
EthereumService Uniswap V3 Anthropic
(ethers v6 + (eth_swap_tokens) (eth_generate_contract)
Alchemy/Infura/
custom RPC)🗺️ Aspectos destacados de la hoja de ruta
Plan completo en ROADMAP.md.
🤝 Contribuyendo
¡Las PR son bienvenidas! Áreas prioritarias: más cobertura de outputSchema, herramientas adicionales, empaquetado Docker, cliente Python, cobertura de pruebas. Abre un issue primero para cambios no triviales.
⭐ Marca este repo con una estrella · 🐛 Informar de un problema · 📜 Licencia MIT
Construido con 💜 por la Portal Foundation
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/PortalFnd/PortalMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
