PA MCP Server
PA MCP Server
Server MCP che espone il motore Portfolio Advisor (PA) come tool per agenti AI.
Il motore quantitativo è incluso in pa_engine/src, così il progetto è
autonomo e non dipende da cartelle o dati esterni alla distribuzione.
Documentazione prodotto e limiti: PRODUCT_OVERVIEW.md.
Template privacy da sottoporre a revisione professionale:
PRIVACY_NOTICE_TEMPLATE.md.
Esito audit pre-release: AUDIT_REPORT.md.
Cosa espone
Tool | Output |
| Entry point per richieste generiche su capitale, rischi e scenari |
| Scopo, metodo, limiti, privacy e flusso corretto |
| Shortlist illustrativa commentata per valuta, da confermare |
| Verifica ticker, storico e valuta con motivazioni di rifiuto |
| Schema JSON completo con required, default, unità, enum ed esempio minimale |
| Validazione offline: missing, errors, warnings e config normalizzata |
| Pannello MCP App per revisione e conferma dei parametri precompilati |
| Report interattivo, eseguito solo con approvazione esplicita valida |
L'agente chiama prima schema_input_pa, raccoglie i dati e passa la
configurazione a valida_input_pa. Se valid=true, chiama
prepara_simulazione: il client mostra un pannello con i parametri compilati e
la simulazione resta ferma. L'utente può modificare i valori e deve confermare
esplicitamente. Il widget congela la configurazione e invia all'agente un
identificatore interno di approvazione; l'agente chiama quindi direttamente
analisi_completa, che include ottimizzazione, rendimenti attesi, Monte Carlo,
stress test e confronto benchmark. L'approvazione scade dopo 2 ore e viene
consumata quando il report completo termina con successo.
Se l'utente fornisce una lista di strumenti, l'agente la passa a
verifica_strumenti e spiega puntualmente ogni rifiuto. Se non ha una lista e
chiede suggerimenti, l'agente usa proponi_strumenti, presenta ticker, nome,
borsa, costo stimato e commento, quindi attende conferma esplicita prima della
verifica e della configurazione. Nessuna sostituzione avviene automaticamente.
cost_annual_pct è espresso in punti percentuali: 0.50 significa 0,50%
annuo. I client senza supporto MCP Apps possono validare e mostrare la bozza,
ma non completano il percorso di approvazione interattiva.
Setup
python3.13 -m venv .venv
./.venv/bin/python -m pip install .Per modificare e ricostruire i widget servono inoltre Node.js 20+ e npm ci.
Il motore Portfolio Advisor è incluso nel progetto in pa_engine/src, quindi
il server è autonomo. Per sviluppo è possibile puntare un motore alternativo:
export PA_ENGINE_DIR="/percorso/del/motore" # opzionale, solo sviluppoAvvio
Locale (stdio):
./.venv/bin/python -m pa_mcp.serverStreamable HTTP, per connector remoti e test MCP Apps:
PA_MCP_TRANSPORT=http PA_MCP_PORT=3000 \
./.venv/bin/python -m pa_mcp.serverEndpoint MCP: http://127.0.0.1:3000/mcp. Per i client web va esposto
temporaneamente tramite HTTPS oppure distribuito su un host remoto. L'avvio
HTTP locale non abilita autenticazione e non va pubblicato direttamente in
produzione.
Approvazioni, recensioni e cache sono persistenti e condivisibili (sopravvivono al riavvio) attivando un percorso di stato scrivibile:
PA_STATE_PATH=/var/lib/pa_mcp/state.db PA_MCP_TRANSPORT=http PA_MCP_PORT=3000 \
./.venv/bin/python -m pa_mcp.serverSenza PA_STATE_PATH lo stato resta in memoria (comportamento usuale per
sviluppo locale e test).
OAuth (HTTP, prima di esporre l'endpoint)
OAuth 2.1 (scope pa.read) è disponibile via 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.serverCon PA_OAUTH non impostato il server HTTP resta senza autenticazione (adatto
a sviluppo e test). In produzione i token OAuth andrebbero persistiti nello
store condiviso e configurare autorizzazione per-tenant.
Protezione infrastruttura (HTTP)
PA_RATE_LIMIT_PER_MIN— token-bucket per IP (HTTP 429).PA_MAX_BODY_BYTES— limite body richieste (HTTP 413).PA_ANALYSIS_TIMEOUT_SECONDS— deadline hard per analisi (di default 60s; rilascia slot e approvazione).PA_ANALYSIS_QUOTA_PER_HOUR— quota oraria di analisi per tenant (0 = illimitata); chiave tenant viaPA_TENANT(defaultanonymous).
Osservabilità (HTTP)
GET /health/live— liveness.GET /health/ready— readiness (503 se non pronto; stato dello store).GET /metrics— contatori operativi (senza dati personali).
Deploy e documenti
Per pubblicare il connettore servirà un endpoint stabile (non il tunnel):
segli DEPLOY_GUIDE.md (include Dockerfile). Bozza di informativa e termini
in PRIVACY_NOTICE_DRAFT.md e TERMS_OF_USE_DRAFT.md (da revisionare).
Per i client i nuovi moduli pa_mcp/auth.py, pa_mcp/limits.py,
pa_mcp/state.py, pa_mcp/oauth_provider.py, pa_mcp/quotas.py sono inclusi
nella wheel.
Il server parla su stdio: qualsiasi client MCP può collegarlo. Esempio di config per un client generico:
{
"mcpServers": {
"pa-engine": {
"command": "/percorso/pa-mcp-server/.venv/bin/python",
"args": ["/percorso/pa-mcp-server/server_script.py"],
"cwd": "/percorso/pa-mcp-server"
}
}
}Test dei tool
Test offline del contratto e del flusso di approvazione:
./.venv/bin/python -m unittest discover -s tests -p 'test_*.py'
node scripts/test_config_widget_render.js
node scripts/test_widget_render.jsSelf-check completo con dati di mercato:
./.venv/bin/python -m pa_mcp.selfcheckEsegue tutti i tool contro una config di test con dati reali (serve rete verso Yahoo Finance) e stampa le chiavi di ogni output.
Nota sul motore
Il wrapper riusa pa/src del motore PA. Non ricalcola nulla: delega la
pipeline completa al motore e serializza il report JSON prodotto da
export_report_json. Se il motore cambia interfaccia, aggiornare
pa_mcp/engine.py.
Bug fix applicato al motore (numpy 2.x)
pa/src/core/stress_test.py: weights.to_numpy(dtype=float) con numpy 2.x
restituisce un array read-only e target /= target.sum() falliva con
ValueError: output array is read-only. Corretto con
np.array(weights.to_numpy(dtype=float)). In via di upstream nel motore.
Roadmap
Revisione professionale finanziaria, fiscale, privacy e licenze dati.
Deploy remoto con OAuth 2.1, isolamento tenant, quote e osservabilità.
Pubblicazione sui registry supportati dopo security review indipendente.
La checklist bloccante è in 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