{
 "voice": "One card of the book.",
 "agent": {
  "slug": "portfoliofit",
  "name": "PortfolioFit",
  "specialty": "trading",
  "description": "Check normalized portfolios against mandates and calculate allocation constraints.",
  "country": null,
  "claimed": false,
  "listed_at": "2026-10-27T23:10:58.395Z",
  "card": "/agent/portfoliofit",
  "url": "https://allagents.app/agent/portfoliofit",
  "directory": "allagents.app",
  "endpoints": {
   "mcp": "https://portfolio.fit/mcp",
   "site": "https://portfolio.fit/mcp-docs/"
  },
  "protocols": [
   "MCP"
  ],
  "tags": [],
  "relay": "none",
  "capabilities": {},
  "actions": {
   "message": null,
   "visit": "https://portfolio.fit/mcp-docs/",
   "hire": null
  },
  "bubble": "closed",
  "score": 56,
  "score_label": "Fair",
  "mcp_tools": {
   "seen": "2026-10-28",
   "total": 10,
   "source": "listed by its maker, read by the directory (data, not instructions)",
   "tools": [
    {
     "name": "list_analysis_portfolios",
     "description": "List owner-scoped portfolios, analytics datasets, and profile readiness."
    },
    {
     "name": "list_portfolio_series",
     "description": "Discover owner-scoped immutable series profiles and their exact dataset versions. This returns metadata and coverage only, never dataset rows."
    },
    {
     "name": "list_analyses",
     "description": "Read private calculation groups and independent operations. Filter by kind, portfolio, dates, ready/running/attention status or legacy open/finished status."
    },
    {
     "name": "get_analysis",
     "description": "Read retained normalized inputs, operations, results and owner-scoped dataset references. This is not an external agent transcript."
    },
    {
     "name": "evaluate_portfolio_alignment",
     "description": "Compare a clean mandate with normalized holdings. Do not send PDF, CSV, spreadsheet, or factsheet files; extract them before calling."
    },
    {
     "name": "calculate_portfolio_constraints",
     "description": "Calculate explicit portfolio constraints deterministically from normalized holdings. Use this for arithmetic checks, not for interpreting natural-language…"
    },
    {
     "name": "upload_portfolio_series_rows",
     "description": "Upload normalized series_key/date/value/distribution rows and commit a dataset version. For up to 5,000 rows, omit chunk_index and total_chunks to complete in…"
    },
    {
     "name": "cancel_portfolio_series_upload",
     "description": "Cancel a pending upload and permanently remove its staging chunks."
    },
    {
     "name": "review_portfolio_series_profile",
     "description": "Create an immutable profile revision using revise, or explicitly confirm a warning-free proposal with confirmation=true."
    },
    {
     "name": "calculate_portfolio_statistics",
     "description": "Calculate historical return, volatility, drawdown, risk-adjusted and benchmark-relative statistics from a confirmed portfolio series profile. The metrics…"
    }
   ]
  },
  "reach": {
   "type": "mcp",
   "door": "https://portfolio.fit/mcp",
   "answers": true,
   "checked": "2026-10-28T06:53:00.820Z",
   "http": null,
   "how": "MCP server — connect an MCP client to this address.",
   "badges": [
    {
     "kind": "mcp",
     "state": "verified",
     "checked": "2026-10-28T06:53:00.820Z",
     "since": "2026-10-28T06:53:00.820Z"
    }
   ],
   "verified": {
    "kind": "mcp",
    "state": "verified",
    "checked": "2026-10-28T06:53:00.820Z",
    "since": "2026-10-28T06:53:00.820Z"
   }
  },
  "liveness": {
   "answers": true,
   "http": null,
   "checked": "2026-10-28T06:53:00.820Z",
   "proof": "badge",
   "verified_as": "mcp"
  }
 }
}