Skip to main content
Glama

🌐 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: Hexiaoyi MCP

🧭 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 openapi.json incluido

✴️ 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 /mcp


🎯 Qué puede hacer

⚡ General

Herramienta

Acción

eth_get_balance

Saldo de ETH de cualquier dirección o la billetera predeterminada

eth_call_contract

Llamada de solo lectura contra cualquier contrato + ABI

eth_send_transaction

Preparar una transacción genérica sin firmar

📜 Contratos inteligentes

Herramienta

Acción

eth_generate_contract

Solidity escrito por Claude desde lenguaje natural

eth_compile_contract

Compilación solc → bytecode + ABI

eth_deploy_contract

Preparar tx de despliegue para firma de billetera externa

eth_deploy_contract_with_signer

Desplegar directamente usando DEPLOYER_PRIVATE_KEY

🪙 Tokens ERC-20

Herramienta

Acción

eth_create_token

Generar Solidity ERC-20

eth_get_token_balance

Saldo ERC-20 de cualquier poseedor

eth_transfer_token

Transferencia firmada o preparación de tx sin firmar

🖼️ NFT ERC-721

Herramienta

Acción

eth_create_nft_collection

Generar Solidity ERC-721

eth_mint_nft

Preparar mint / safeMint / mintWithURI

eth_get_nft_owner

Búsqueda ownerOf()

🏦 DeFi

Herramienta

Acción

eth_create_staking_contract

Generar Solidity de staking

eth_stake_tokens

Preparar txs de aprobación + staking

eth_swap_tokens

Intercambio universal Uniswap V3 (cualquier par ERC-20)

eth_swap_eth_to_usdt

Alias de conveniencia del anterior

URI

Devuelve

eth://wallet

Dirección del firmante configurado, red, saldo de ETH

eth://balance/{address}

Saldo de ETH en vivo para cualquier dirección

eth://tx/{hash}

Transacción + recibo (estado, gas, bloque, registros, URL del explorador)

eth://token/{address}

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.

  1. Aloja el servidor HTTP con una URL HTTPS pública (Caddy / Cloudflare Tunnel / Nginx).

  2. Configura MCP_HTTP_TOKEN=<cadena-larga-aleatoria> para que solo tú puedas llamarlo.

  3. En Claude.ai → Settings → Connectors → Add Custom Connector:

    • URL: https://your-host.example.com/mcp

    • Auth: Authorization: Bearer <MCP_HTTP_TOKEN>

  4. 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

ETHEREUM_NETWORK

–

mainnet, sepolia, arbitrum, optimism, base, polygon, … (predeterminado mainnet)

ETHEREUM_RPC_URL

⭐

URL JSON-RPC completa — sobrescribe la configuración de clave Infura/Alchemy

ALCHEMY_API_KEY

alt

Solo clave — PortalMCP construye la URL moderna g.alchemy.com

INFURA_API_KEY

alt

ID de proyecto Infura

DEPLOYER_PRIVATE_KEY

escrituras

Hexadecimal prefijado con 0x — habilita herramientas respaldadas por firmante

ANTHROPIC_API_KEY

generar

Para eth_generate_contract

ANTHROPIC_MODEL

–

Sobrescribir el predeterminado claude-sonnet-4-5-20250929

MCP_HTTP_PORT

–

Predeterminado 3333

MCP_HTTP_HOST

–

Predeterminado 0.0.0.0

MCP_HTTP_TOKEN

🛡️

Token Bearer para el transporte HTTP

MCP_HTTP_CORS_ORIGIN

–

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_KEY es un arma cargada. Usa una billetera de agente dedicada solo con fondos que puedas permitirte perder.

  • 🛰️ Configura siempre MCP_HTTP_TOKEN al exponer HTTP más allá de localhost, y coloca TLS (Caddy/Cloudflare) delante.

  • 🧪 Primero testnet — usa sepolia para 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_contract es 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             # Jest

Script

Propósito

npm start

Servidor MCP stdio (prod)

npm run start:http

Servidor MCP HTTP transmitible (prod)

npm run start:api

REST heredado para acciones de ChatGPT / clientes HTTP

npm run smoke

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A powerful toolkit that enables seamless interaction with EVM-compatible networks through natural language processing and AI assistance, allowing users to manage wallets, launch tokens, and interact with blockchain networks.
    7 npm
    MIT
  • A
    license
    C
    quality
    B
    maintenance
    Enables AI agents to interact with any EVM-compatible blockchain through natural language, supporting token swaps, cross-chain bridges, staking, lending, governance, gas optimization, and portfolio tracking across networks like Ethereum, BSC, Polygon, Arbitrum, and more.
    100
    31 npm
    42
    -