PortalMCP
🌐 PortalMCP
Универсальный AI-шлюз для Ethereum
Один сервер. Любой AI. Весь блокчейн.
Подключите любой клиент Model-Context-Protocol — Claude, ChatGPT, Gemini, Cursor, Windsurf, Cline, кастомных агентов — к Ethereum с помощью естественного языка. Проверяйте балансы, обменивайте токены, минтите NFT, создавайте и развертывайте смарт-контракты.
Быстрый старт · Настройка клиента · Инструменты · Дорожная карта · Журнал изменений
✨ Почему PortalMCP
Большинство интеграций AI с блокчейном привязывают вас к одной LLM или одному клиенту. PortalMCP — это MCP-сервер, соответствующий спецификации: один и тот же сервер, запущенный локально или на вашем VPS, работает с любым клиентом, поддерживающим MCP.
🔐 Некастодиальный — приватные ключи никогда не покидают вашу машину 🛰️ Контекст блокчейна в реальном времени — ресурсы транслируют балансы ETH, квитанции транзакций и метаданные токенов прямо в ваш чат 🛡️ Безопасность прежде всего — каждый инструмент содержит подсказки о том, является ли он «чтением» или «деструктивным» действием, чтобы клиенты могли подтвердить операцию перед отправкой 🧩 Универсальность — работает как через stdio, так и через HTTP, совместим со всеми MCP-клиентами
Related MCP server: Hexiaoyi MCP
🧭 Совместимые клиенты
Клиент | Транспорт | Примечания |
🟣 Claude Desktop (macOS/Windows) | stdio | Конфиг ниже |
🌐 Claude.ai web + mobile | HTTP | Добавить как Custom Connector (Pro/Team/Enterprise) |
💻 Claude Code / CLI | любой | |
🧠 Cursor · Windsurf · Cline · Continue · Zed AI | stdio | Нативный MCP |
💬 ChatGPT (Team/Enterprise) | HTTP | MCP-коннектор |
🛠️ ChatGPT Custom GPTs | REST | Использует встроенный |
✴️ Google Gemini / Vertex Agents | HTTP | MCP-коннектор |
🐍 LangChain · LlamaIndex · OpenAI Agents SDK | любой | через их MCP-адаптеры |
🤖 Любой HTTP-агент | HTTP | Обычный JSON-RPC + SSE на |
🎯 Что он умеет
⚡ Общие
Инструмент | Действие |
| Баланс ETH любого адреса или кошелька по умолчанию |
| Вызов контракта (только чтение) + ABI |
| Подготовка общей неподписанной транзакции |
📜 Смарт-контракты
Инструмент | Действие |
| Solidity-код, написанный Claude на естественном языке |
| Компиляция solc → байт-код + ABI |
| Подготовка транзакции развертывания для подписи внешним кошельком |
| Развертывание напрямую с использованием |
🪙 ERC-20 токены
Инструмент | Действие |
| Генерация ERC-20 Solidity |
| Баланс ERC-20 любого держателя |
| Подписанный перевод или подготовка неподписанной транзакции |
🖼️ ERC-721 NFT
Инструмент | Действие |
| Генерация ERC-721 Solidity |
| Подготовка |
| Поиск через |
🏦 DeFi
Инструмент | Действие |
| Генерация Solidity для стейкинга |
| Подготовка транзакций approve + stake |
| Универсальный обмен Uniswap V3 (любая пара ERC-20) |
| Удобный алиас для вышеуказанного |
URI | Возвращает |
| Адрес настроенного подписывающего лица, сеть, баланс ETH |
| Текущий баланс ETH для любого адреса |
| Транзакция + квитанция (статус, газ, блок, логи, URL в эксплорере) |
| Метаданные ERC-20 (имя, символ, десятичные знаки, общее предложение) |
/swap_tokens— пошаговый процесс обмена токенов/deploy_erc20— генерация → компиляция → развертывание «под ключ»
🚀 Быстрый старт
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🔌 Настройка клиента
Отредактируйте ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) или %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-..."
}
}
}
}Перезапустите Claude Desktop. 17 инструментов, ресурсы eth:// и две команды через слэш появятся автоматически.
Разместите HTTP-сервер с публичным HTTPS URL (Caddy / Cloudflare Tunnel / Nginx).
Установите
MCP_HTTP_TOKEN=<длинная-случайная-строка>, чтобы только вы могли его вызывать.В Claude.ai → Settings → Connectors → Add Custom Connector:
URL:
https://your-host.example.com/mcpAuth:
Authorization: Bearer <MCP_HTTP_TOKEN>
Работает как в веб-версии, так и в мобильном приложении.
Все они поддерживают MCP нативно. Добавьте запись в их MCP-конфиг, указывающую на:
node /absolute/path/to/PortalMCP/portalmcp/dist/index.js(Та же команда stdio, что и для Claude Desktop.)
Рекомендуемый способ — MCP-коннектор (ChatGPT Team/Enterprise, Gemini/Vertex Agents):
Укажите https://your-host/mcp, опционально с Bearer-токеном.
Устаревший REST (ChatGPT Custom GPT Actions или любой HTTP-агент):
npm run start:api
# OpenAPI spec: http://localhost:3001/openapi.json💬 Примеры диалогов
Развертывание токена с нуля
"Разверни ERC-20 под названием PortalToken (PRTL) с начальным предложением 1 000 000."
→
eth_generate_contract→ показывает код →eth_compile_contract→eth_deploy_contract_with_signer→ возвращает адрес контракта + ссылку на Etherscan.
Универсальный обмен
"Обменяй 0.01 ETH на USDC."
→
eth_swap_tokens { tokenIn:"ETH", tokenOut:"USDC", amount:"0.01" }— одобряет (если нужно) и выполняет через Uniswap V3.
Контекст блокчейна в реальном времени
"Какой баланс у
vitalik.eth?"→ клиент добавляет ресурс
eth://balance/0xd8dA…прямо в диалог.
⚙️ Конфигурация
Все через переменные окружения (файл .env или переменные хоста). Полный список в .env.example.
Переменная | Обязательно | Цель |
| – |
|
| ⭐ | Полный URL JSON-RPC — переопределяет настройку ключей Infura/Alchemy |
| alt | Только ключ — PortalMCP создает современный URL |
| alt | ID проекта Infura |
| запись | Hex-строка с префиксом |
| генерация | Для |
| – | Переопределение стандартного |
| – | По умолчанию |
| – | По умолчанию |
| 🛡️ | Bearer-токен для HTTP-транспорта |
| – | По умолчанию |
💡 Обнаружение плейсхолдеров — любое значение переменной окружения, начинающееся с
your_,changeme,xxx,placeholder,<…>, считается не заданным. Это предотвращает скрытые ошибки конфигурации.
🌍 Поддерживаемые сети
🛡️ Безопасность
🚫 Никогда не коммитьте
.env— он уже в.gitignore.🔑
DEPLOYER_PRIVATE_KEY— это заряженное ружье. Используйте отдельный кошелек агента только с теми средствами, которые вы готовы потерять.🛰️ Всегда устанавливайте
MCP_HTTP_TOKENпри открытии HTTP за пределы localhost и используйте TLS (Caddy/Cloudflare) перед ним.🧪 Сначала тестнет — используйте
sepoliaдля разработки, mainnet — только после проверки процесса.🏷️ Аннотации инструментов позволяют клиентам запрашивать подтверждение перед деструктивными транзакциями — не одобряйте их автоматически.
👀 Проверяйте сгенерированный Solidity —
eth_generate_contract— это отправная точка, а не аудит.
🧑💻 Разработка
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Скрипт | Цель |
| stdio MCP-сервер (prod) |
| Streamable HTTP MCP-сервер (prod) |
| Устаревший REST для ChatGPT Actions / HTTP-клиентов |
| Дымовой тест регистрации — отлично для CI |
Структура репозитория
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🏗️ Архитектура
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)🗺️ Основные моменты дорожной карты
Полный план в ROADMAP.md.
🤝 Участие в разработке
PR приветствуются! Приоритетные области: больше покрытия outputSchema, дополнительные инструменты, упаковка в Docker, Python-клиент, покрытие тестами. Для нетривиальных изменений сначала откройте issue.
⭐ Поставить звезду репозиторию · 🐛 Сообщить об ошибке · 📜 Лицензия MIT
Создано с 💜 командой Portal Foundation
This server cannot be deployed
Maintenance
Related MCP Connectors
Monetization and execution gateway for autonomous AI agents on Base Mainnet
Bitcoin + Ethereum RPC for AI agents. 44 tools. x402 payments in USDC on Base mainnet.
AI agent gateway with web fetching, data extraction, crypto pricing, and x402 payments
AI Agent Utility Layer for agent safety, web monitoring, crypto research and tool discovery.
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides Claude with access to Ethereum and EVM-compatible blockchain operations, enabling wallet management, transaction handling, contract interactions, and blockchain queries through natural language.35110 npm10MIT
- AlicenseNot gradedqualityDmaintenanceA 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 npmMIT
- AlicenseCqualityBmaintenanceEnables 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.10031 npm42-
- AlicenseNot gradedqualityCmaintenanceEnables AI-powered chat and DeFi operations (swap, transfer) via MCP-compliant tools, integrating with LLMs for onchain actions.6 npmMIT