PortfolioFit
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Check normalized portfolios against mandates and calculate allocation constraints.
| Author | fit.portfolio |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 2003 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"PortfolioFit": {
"url": "https://portfolio.fit/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (10)
list_analysis_portfoliosread-onlyList owner-scoped portfolios, analytics datasets, and profile readiness.
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_portfolio_seriesread-onlyDiscover owner-scoped immutable series profiles and their exact dataset versions. This returns metadata and coverage only, never dataset rows.
Parameters:
cursorstatusespage_size— integerportfolio_id
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_analysesread-onlyRead private calculation groups and independent operations. Filter by kind, portfolio, dates, ready/running/attention status or legacy open/finished status.
Parameters:
kindpage— integerstatusdate_todate_frompage_size— integerportfolio_id
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_analysisread-onlyRead retained normalized inputs, operations, results and owner-scoped dataset references. This is not an external agent transcript.
Parameters:
analysis_id(required) — string
Hints: read-only yes · destructive no · idempotent yes · open-world no
evaluate_portfolio_alignmentCompare a clean mandate with normalized holdings. Do not send PDF, CSV, spreadsheet, or factsheet files; extract them before calling.
Parameters:
holdings(required) — arrayidempotency_key(required) — stringrulesmandate— stringanalysis_name— Optional private grouping name. The same case-sensitive name, after trimming outer whitespace, reuses one group for this user. Omit it for an independent operation. Keep the name on retries; each calculation still needs its own idempotency_key.base_currency— stringportfolio_name— stringsource_warningscomposition_scope— string
Hints: read-only no · destructive no · idempotent yes · open-world no
calculate_portfolio_constraintsCalculate explicit portfolio constraints deterministically from normalized holdings. Use this for arithmetic checks, not for interpreting natural-language mandates.
Parameters:
holdings(required) — arrayconstraints(required) — arrayidempotency_key(required) — stringanalysis_name— Optional private grouping name. The same case-sensitive name, after trimming outer whitespace, reuses one group for this user. Omit it for an independent operation. Keep the name on retries; each calculation still needs its own idempotency_key.base_currency— stringsource_warningscomposition_scope— string
Hints: read-only no · destructive no · idempotent yes · open-world no
upload_portfolio_series_rowsUpload 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 one call. For larger inputs, declare total_chunks on every call, send chunks in order, and reuse upload_id and idempotency_key. The final chunk automatically verifies and commits all data and returns immutable series profiles. Parse files locally before calling.
Parameters:
idempotency_key(required) — stringrows(required) — arraysourceupload_iddataset_idchunk_index— integer — Zero-based chunk position; upload chunks in order.content_hash— stringdataset_name— stringportfolio_idtotal_chunks— integer — Total number of chunks in this upload. The last accepted chunk commits the dataset automatically.analysis_name— Optional private grouping name. The same case-sensitive name, after trimming outer whitespace, reuses one group for this user. Omit it for an independent operation. Keep the name on retries; each calculation still needs its own idempotency_key.series_profiles— Source-backed semantics for each series_key. Supply on the first or final chunk; the final chunk can complete the proposals before commit. Ambiguous or incomplete profiles require review before calculation.new_portfolio_name— string
Hints: read-only no · destructive no · idempotent yes · open-world no
cancel_portfolio_series_uploaddestructiveCancel a pending upload and permanently remove its staging chunks.
Parameters:
upload_id(required) — stringanalysis_name— Optional private grouping name. The same case-sensitive name, after trimming outer whitespace, reuses one group for this user. Omit it for an independent operation. Keep the name on retries; each calculation still needs its own idempotency_key.
Hints: read-only no · destructive yes · idempotent yes · open-world no
review_portfolio_series_profileCreate an immutable profile revision using revise, or explicitly confirm a warning-free proposal with confirmation=true.
Parameters:
profile_id(required) — stringaction(required) — stringrevisionsconfirmation— booleananalysis_name— Optional private grouping name. The same case-sensitive name, after trimming outer whitespace, reuses one group for this user. Omit it for an independent operation. Keep the name on retries; each calculation still needs its own idempotency_key.
Hints: read-only no · destructive no · idempotent no · open-world no
calculate_portfolio_statisticsCalculate historical return, volatility, drawdown, risk-adjusted and benchmark-relative statistics from a confirmed portfolio series profile. The metrics parameter describes all available calculations and their required inputs. Use daily, weekly or monthly complete periods; results include coverage, warnings and exact dataset/profile pins. Reuse an idempotency_key only for an identical calculation.
Parameters:
series_profile_id(required) — string — Confirmed portfolio series profile returned by upload or list_portfolio_series; pins one immutable dataset version.metrics(required) — array — Select one or more unique metric names. periodic_returns: Return for each complete period at target_frequency. cumulative_return: Compounded return across the selected complete periods. observation_count: Number of source observations in the selected date range. period_count: Number of complete return periods available for calculation. min_return: Lowest periodic return and its period end date. max_return: Highest periodic return and its period end date. volatility: Sample standard deviation of periodic returns, with annualized volatility. drawdown: Decline from the running peak of compounded wealth for each period. max_drawdown: Largest peak-to-trough decline, with peak, trough and recovery dates when available. downside_deviation: Root mean square shortfall below minimum_acceptable_return, with annualized deviation. Requires minimum_acceptable_return. sharpe: Mean return above risk_free_rate divided by the sample standard deviation of excess returns, with annualized ratio. Requires risk_free_rate. sortino: Mean return above minimum_acceptable_return divided by downside deviation, with annualized ratio. Requires minimum_acceptable_return. beta: Sensitivity of portfolio returns to benchmark returns. Requires benchmark_profile_id. alpha: Return above the benchmark return implied by beta and risk_free_rate, with annualized alpha. Requires benchmark_profile_id and risk_free_rate. correlation: Pearson correlation between portfolio and benchmark returns. Requires benchmark_profile_id. tracking_error: Sample standard deviation of portfolio-minus-benchmark returns, with annualized tracking error. Requires benchmark_profile_id. information_ratio: Mean portfolio-minus-benchmark return divided by tracking error, with annualized ratio. Requires benchmark_profile_id.target_frequency(required) — string — Calculate complete daily, weekly or monthly return periods. Annualization uses 252, 52 or 12 periods per year respectively; finer-frequency data must be available.idempotency_key(required) — stringend_datestart_dateanalysis_name— Optional private grouping name. The same case-sensitive name, after trimming outer whitespace, reuses one group for this user. Omit it for an independent operation. Keep the name on retries; each calculation still needs its own idempotency_key.risk_free_rate— Required for sharpe and alpha. Use a confirmed risk-free rate profile or a source-backed dated annualized scalar with currency, tenor, compounding and provenance. Do not substitute an assumed rate.benchmark_profile_id— Confirmed benchmark series profile in the same currency and return basis as the portfolio. Required for beta, alpha, correlation, tracking_error and information_ratio. Returns are matched by exact period dates.minimum_acceptable_return— Required for downside_deviation and sortino. Use a confirmed minimum acceptable return profile or a source-backed dated annualized scalar with currency, tenor, compounding and provenance.
Hints: read-only no · destructive no · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.