PA MCP Server
PA MCP Server
MCP-сервер, который предоставляет движок Portfolio Advisor (PA) в качестве инструмента для ИИ-агентов.
Количественный движок включён в pa_engine/src, поэтому проект автономен и не зависит от внешних папок или данных при распространении.
Документация по продукту и ограничениям: PRODUCT_OVERVIEW.md.
Шаблон уведомления о конфиденциальности, подлежащий профессиональной ревизии:
PRIVACY_NOTICE_TEMPLATE.md.
Результат предрелизного аудита: AUDIT_REPORT.md.
Что предоставляет
Инструмент | Результат |
| Точка входа для общих запросов о капитале, рисках и сценариях |
| Назначение, метод, ограничения, конфиденциальность и правильный порядок действий |
| Иллюстративный короткий список с комментариями по валюте, требующий подтверждения |
| Проверка тикеров, истории и валюты с указанием причин отказа |
| Полная JSON-схема с required, default, единицами измерения, enum и минимальным примером |
| Офлайн-валидация: missing, errors, warnings и нормализованная конфигурация |
| Панель MCP App для просмотра и подтверждения предзаполненных параметров |
| Интерактивный отчёт, выполняемый только при действительном явном одобрении |
Агент сначала вызывает schema_input_pa, собирает данные и передаёт конфигурацию в valida_input_pa. Если valid=true, он вызывает prepara_simulazione: клиент показывает панель с заполненными параметрами, и симуляция остаётся на паузе. Пользователь может изменять значения и должен явно подтвердить их. Виджет замораживает конфигурацию и отправляет агенту внутренний идентификатор одобрения; затем агент напрямую вызывает analisi_completa, которая включает оптимизацию, ожидаемую доходность, Monte Carlo, стресс-тесты и сравнение с бенчмарком. Одобрение истекает через 2 часа и потребляется после успешного завершения полного отчёта.
Если пользователь предоставляет список инструментов, агент передаёт его в verifica_strumenti и объясняет каждый отказ по пунктам. Если списка нет и пользователь запрашивает рекомендации, агент использует proponi_strumenti, показывает тикер, название, биржу, ориентировочную стоимость и комментарий, а затем ожидает явного подтверждения перед проверкой и настройкой. Никакие замены не выполняются автоматически.
cost_annual_pct выражается в процентных пунктах: 0.50 означает 0,50% в год. Клиенты без поддержки MCP Apps могут выполнить валидацию и показать черновик, но не могут пройти путь интерактивного одобрения.
Настройка
python3.13 -m venv .venv
./.venv/bin/python -m pip install .Для изменения и пересборки виджетов также требуются Node.js 20+ и npm ci.
Движок Portfolio Advisor включён в проект в pa_engine/src, поэтому сервер автономен. Для разработки можно указать альтернативный движок:
export PA_ENGINE_DIR="/percorso/del/motore" # opzionale, solo sviluppoЗапуск
Локально (stdio):
./.venv/bin/python -m pa_mcp.serverStreamable HTTP — для удалённых коннекторов и тестирования MCP Apps:
PA_MCP_TRANSPORT=http PA_MCP_PORT=3000 \
./.venv/bin/python -m pa_mcp.serverЭндпоинт MCP: http://127.0.0.1:3000/mcp. Для веб-клиентов его нужно временно выставить через HTTPS либо развернуть на удалённом хосте. Локальный запуск HTTP не включает аутентификацию и не должен публиковаться напрямую в production.
Одобрения, рецензии и кэш становятся постоянными и разделяемыми (переживают перезапуск) при включении записываемого пути состояния:
PA_STATE_PATH=/var/lib/pa_mcp/state.db PA_MCP_TRANSPORT=http PA_MCP_PORT=3000 \
./.venv/bin/python -m pa_mcp.serverБез PA_STATE_PATH состояние остаётся в памяти (обычное поведение для локальной разработки и тестов).
OAuth (HTTP, перед публикацией эндпоинта)
OAuth 2.1 (scope pa.read) доступен через FastMCP OAuthProvider:
PA_OAUTH=1 PA_PUBLIC_BASE_URL=https://pa.example.com \
PA_MCP_TRANSPORT=http PA_MCP_PORT=3000 ./.venv/bin/python -m pa_mcp.serverЕсли PA_OAUTH не задан, HTTP-сервер остаётся без аутентификации (подходит для разработки и тестирования). В production токены OAuth следует сохранять в общем хранилище и настраивать авторизацию для каждого тенанта.
Защита инфраструктуры (HTTP)
PA_RATE_LIMIT_PER_MIN— token-bucket на IP (HTTP 429).PA_MAX_BODY_BYTES— лимит тела запросов (HTTP 413).PA_ANALYSIS_TIMEOUT_SECONDS— жёсткий дедлайн анализа (по умолчанию 60 с; освобождает слот и одобрение).PA_ANALYSIS_QUOTA_PER_HOUR— часовая квота анализов на тенанта (0 = без ограничений); ключ тенанта черезPA_TENANT(по умолчаниюanonymous).
Наблюдаемость (HTTP)
GET /health/live— проверка живости.GET /health/ready— готовность (503, если не готов; состояние хранилища).GET /metrics— операционные счётчики (без персональных данных).
Развёртывание и документы
Для публикации коннектора потребуется стабильный эндпоинт (не туннель): следуйте DEPLOY_GUIDE.md (включает Dockerfile). Черновик уведомления о конфиденциальности и условий — в PRIVACY_NOTICE_DRAFT.md и TERMS_OF_USE_DRAFT.md (подлежат ревизии).
Для клиентов новые модули pa_mcp/auth.py, pa_mcp/limits.py, pa_mcp/state.py, pa_mcp/oauth_provider.py, pa_mcp/quotas.py включены в wheel.
Сервер работает через stdio: любой MCP-клиент может подключиться к нему. Пример конфигурации для универсального клиента:
{
"mcpServers": {
"pa-engine": {
"command": "/percorso/pa-mcp-server/.venv/bin/python",
"args": ["/percorso/pa-mcp-server/server_script.py"],
"cwd": "/percorso/pa-mcp-server"
}
}
}Тестирование инструментов
Офлайн-тест контракта и процесса одобрения:
./.venv/bin/python -m unittest discover -s tests -p 'test_*.py'
node scripts/test_config_widget_render.js
node scripts/test_widget_render.jsПолная самопроверка с рыночными данными:
./.venv/bin/python -m pa_mcp.selfcheckВыполняет все инструменты на тестовой конфигурации с реальными данными (требуется доступ к Yahoo Finance) и печатает ключи каждого результата.
Примечание о движке
Обёртка использует pa/src движка PA. Ничего не пересчитывает: делегирует весь конвейер движку и сериализует JSON-отчёт, созданный export_report_json. Если интерфейс движка изменится, обновите pa_mcp/engine.py.
Исправление ошибки, применённое к движку (numpy 2.x)
pa/src/core/stress_test.py: weights.to_numpy(dtype=float) с numpy 2.x возвращает массив только для чтения, и target /= target.sum() завершалось ошибкой ValueError: output array is read-only. Исправлено с помощью np.array(weights.to_numpy(dtype=float)). В процессе передачи в upstream движка.
Дорожная карта
Профессиональная ревизия финансовых, налоговых аспектов, конфиденциальности и лицензий на данные.
Удалённое развёртывание с OAuth 2.1, изоляцией тенантов, квотами и наблюдаемостью.
Публикация в поддерживаемых реестрах после независимой проверки безопасности.
Блокирующий контрольный список находится в GO_LIVE_CHECKLIST.md.
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.
Related MCP Connectors
Portfolio risk analytics — VaR, Monte Carlo, optimization, options Greeks, stress testing.
Deterministic what-if & scenario simulation for AI agents: projections, sensitivity & break-even.
Build, backtest, and deploy quantitative trading strategies from your AI agent.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Manuciao88/pa-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server