# pyeconomics (pypi · pyeconomics)

Tested, cited economics and finance models and data, with a provenance manifest per result.

- Trust score: 72/100 (medium)
- Change this week: +4
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-06

## Components

- pypi · `pyeconomics`: 72/100 (this document), [markdown](https://verifymcp.io/servers/pyeconomics-dev-pyeconomics/pyeconomics.md), [page](https://verifymcp.io/servers/pyeconomics-dev-pyeconomics/pyeconomics)

## Channel facts

- Registry: `pypi`
- Package: `pyeconomics`
- Version: `1.0.0b1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-06.

- **Supply Chain Security**: 49/100
  - Malware scan not yet available for this package.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs uv_build at install time, a recognised build step with no custom scripting around it.
  - 4 of 28 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 100/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to pyeconomics-dev/pyeconomics).
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 8 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 85/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 2773 tokens (~126/item across 22 items; 21 tools + 1 resources), over budget; trim descriptions and params.
  - Tools include usage examples.
- **Stability & Change Management**: 30/100
  - Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 21 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 22 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).
  - Supports UI / widget rendering.

## Install

### How do I install the pyeconomics MCP server?

pyeconomics runs locally as a PyPI package, launched with uvx --from 'pyeconomics[mcp]==1.0.0b1' pyeconomics mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add pyeconomics-dev-pyeconomics -- uvx --from 'pyeconomics[mcp]==1.0.0b1' pyeconomics mcp
```

### Cursor

```json
{
  "mcpServers": {
    "pyeconomics-dev-pyeconomics": {
      "command": "uvx",
      "args": [
        "--from",
        "pyeconomics[mcp]==1.0.0b1",
        "pyeconomics",
        "mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "pyeconomics-dev-pyeconomics": {
      "command": "uvx",
      "args": [
        "--from",
        "pyeconomics[mcp]==1.0.0b1",
        "pyeconomics",
        "mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add pyeconomics-dev-pyeconomics -- uvx --from 'pyeconomics[mcp]==1.0.0b1' pyeconomics mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "pyeconomics-dev-pyeconomics": {
      "type": "local",
      "command": [
        "uvx",
        "--from",
        "pyeconomics[mcp]==1.0.0b1",
        "pyeconomics",
        "mcp"
      ],
      "enabled": true
    }
  }
}
```

### Hermes

```yaml
mcp_servers:
  pyeconomics-dev-pyeconomics:
    command: "uvx"
    args: ["--from", "pyeconomics[mcp]==1.0.0b1", "pyeconomics", "mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "pyeconomics-dev-pyeconomics": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "--from",
        "pyeconomics[mcp]==1.0.0b1",
        "pyeconomics",
        "mcp"
      ]
    }
  }
}
```

### Other

```json
{
  "mcpServers": {
    "pyeconomics-dev-pyeconomics": {
      "command": "uvx",
      "args": [
        "--from",
        "pyeconomics[mcp]==1.0.0b1",
        "pyeconomics",
        "mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-06 (score 72, −11)

- [security regression] Malware scan: pass → unverified
- [functional improvement] Stability: unverified → 0.30

### 2026-11-05 (score 83, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-11-03 (score 68, −15)

- [security regression] Malware scan: pass → unverified

### 2026-11-02 (score 83, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-30 (score 68, −15)

- [security regression] Malware scan: pass → unverified

### 2026-10-29 (score 83, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-28 (score 68)

First indexed and scored.

## MCP tools (21)

### `corporate_capital_budgeting` (~161 tokens)

Capital budgeting

Project NPV, IRR, MIRR, fractional payback, profitability index and equivalent annual annuity. Runs Capital budgeting (corporate.capital_budgeting, version 2) on the given inputs and returns its canonical result: the validated inputs, the outputs, the warnings and the manifest. Every number carries its unit in the input schema; rates are decimals.

Input parameters:

- `cash_flows` (array, required): Signed project cash flows at t=0, 1, ...; negative means paid out
- `finance_rate` (number): MIRR financing rate per period for negative flows
- `rate` (number, required): Discount rate per period
- `reinvestment_rate` (number): MIRR reinvestment rate per period for positive flows

Output parameters:

- `inputs`
- `manifest`
- `model_id`
- `model_version`
- `outputs`
- `warnings` (array)

### `corporate_cost_of_capital` (~116 tokens)

Cost of capital and beta

CAPM, WACC with preferred equity, Hamada unlevering/relevering, and country risk premium. Runs Cost of capital and beta (corporate.cost_of_capital, version 1) on the given inputs and returns its canonical result: the validated inputs, the outputs, the warnings and the manifest. The required calculation field selects one of: capm, country_risk_premium, relever_beta, unlever_beta, wacc. Every number carries its unit in the input schema; rates are decimals.

Output parameters:

- `inputs`
- `manifest`
- `model_id`
- `model_version`
- `outputs`
- `warnings` (array)

### `derivatives_binomial_tree` (~231 tokens)

Binomial option tree

Cox-Ross-Rubinstein binomial prices of European and American calls and puts with a dividend yield, with delta and gamma from the tree. Runs Binomial option tree (derivatives.binomial_tree, version 1) on the given inputs and returns its canonical result: the validated inputs, the outputs, the warnings and the manifest. Every number carries its unit in the input schema; rates are decimals.

Input parameters:

- `dividend_yield` (number): Dividend yield per year, continuously compounded
- `exercise` (string): European (at expiry only) or American (at any step) exercise
- `option_type`: A call (the right to buy) or a put (to sell)
- `risk_free_rate` (number, required): Risk-free rate per year, continuously compounded
- `spot` (number, required): Price of the underlying asset now
- `steps` (integer): Number of time steps in the tree
- `strike` (number, required): Strike price
- `volatility` (number, required): Volatility of the asset's return per year
- `years` (number, required): Time to expiry, in years

Output parameters:

- `inputs`
- `manifest`
- `model_id`
- `model_version`
- `outputs`
- `warnings` (array)

### `derivatives_black_scholes_merton` (~105 tokens)

Black-Scholes-Merton options

Price, Greeks and implied volatility of European calls and puts on an asset with a continuous dividend yield. Runs Black-Scholes-Merton options (derivatives.black_scholes_merton, version 1) on the given inputs and returns its canonical result: the validated inputs, the outputs, the warnings and the manifest. The required calculation field selects one of: implied_volatility, price. Every number carries its unit in the input schema; rates are decimals.

Output parameters:

- `inputs`
- `manifest`
- `model_id`
- `model_version`
- `outputs`
- `warnings` (array)

### `describe_model` (~78 tokens)

Model description

Describes one model: its formula, assumptions, limitations, references, examples, data bindings, input and output schemas (JSON Schema 2020-12, every number with its unit; rates are decimals) and its model card.

Input parameters:

- `model_id` (string, required): A model id, or an alias of one, as search_models lists them.

Output parameters:

- `aliases` (array)
- `assumptions` (array)
- `bindings` (array)
- `card` (string): The model card as MyST Markdown.
- `changelog` (array)
- `charts` (array)
- `cost`
- `domain` (string)
- `evidence`
- `examples` (array)
- `extra` (string|null)
- `formula` (array): LaTeX, one line per item.
- `id` (string)
- `input_schema` (object): The model's JSON Schema 2020-12 input document.
- `invariants` (array)
- `limitations` (array)
- `no_invariants_reason` (string|null)
- `output_schema` (object): The model's JSON Schema 2020-12 output document.
- `references` (array)
- `summary` (string)
- `tags` (array)
- `title` (string)
- `version` (integer)

### `equity_dividend_discount` (~102 tokens)

Dividend discount valuation

Gordon, two-stage and H-model values, PVGO and the Gordon implied return. Runs Dividend discount valuation (equity.dividend_discount, version 1) on the given inputs and returns its canonical result: the validated inputs, the outputs, the warnings and the manifest. The required calculation field selects one of: gordon, h_model, implied_return, pvgo, two_stage. Every number carries its unit in the input schema; rates are decimals.

Output parameters:

- `inputs`
- `manifest`
- `model_id`
- `model_version`
- `outputs`
- `warnings` (array)

### `equity_free_cash_flow` (~104 tokens)

Free cash flow and DCF valuation

FCFF from EBIT, FCFE from net income, and one- or two-stage firm or equity valuation. Runs Free cash flow and DCF valuation (equity.free_cash_flow, version 1) on the given inputs and returns its canonical result: the validated inputs, the outputs, the warnings and the manifest. The required calculation field selects one of: fcfe, fcff, valuation. Every number carries its unit in the input schema; rates are decimals.

Output parameters:

- `inputs`
- `manifest`
- `model_id`
- `model_version`
- `outputs`
- `warnings` (array)

### `fixed_income_bond_pricing` (~125 tokens)

Bond price and yield

Full and flat price and accrued interest of a fixed-coupon bond from its yield, and its yield to maturity, to a call and to worst from its price. Runs Bond price and yield (fixed_income.bond_pricing, version 2) on the given inputs and returns its canonical result: the validated inputs, the outputs, the warnings and the manifest. The required calculation field selects one of: price_from_yield, yield_from_price, yield_to_call, yield_to_worst. Every number carries its unit in the input schema; rates are decimals.

Output parameters:

- `inputs`
- `manifest`
- `model_id`
- `model_version`
- `outputs`
- `warnings` (array)

### `fixed_income_curve_bootstrap` (~108 tokens)

Spot, par and forward curves

Bootstrap spot rates and discount factors from par yields, par yields from spot rates, and forward rates between maturities. Runs Spot, par and forward curves (fixed_income.curve_bootstrap, version 1) on the given inputs and returns its canonical result: the validated inputs, the outputs, the warnings and the manifest. The required calculation field selects one of: forward_rate, from_par, from_spot. Every number carries its unit in the input schema; rates are decimals.

Output parameters:

- `inputs`
- `manifest`
- `model_id`
- `model_version`
- `outputs`
- `warnings` (array)

### `fixed_income_duration` (~108 tokens)

Bond duration

Macaulay and modified duration from a yield, effective and key-rate duration off a spot curve, and DV01 of a fixed-coupon bond. Runs Bond duration (fixed_income.duration, version 2) on the given inputs and returns its canonical result: the validated inputs, the outputs, the warnings and the manifest. The required calculation field selects one of: dv01, effective, key_rate, macaulay_modified. Every number carries its unit in the input schema; rates are decimals.

Output parameters:

- `inputs`
- `manifest`
- `model_id`
- `model_version`
- `outputs`
- `warnings` (array)

### `foundations_returns` (~95 tokens)

Return toolkit

Holding-period, arithmetic, geometric, harmonic, annualized, log and real returns. Runs Return toolkit (foundations.returns, version 1) on the given inputs and returns its canonical result: the validated inputs, the outputs, the warnings and the manifest. The required calculation field selects one of: annualized, holding_period, log, means, real. Every number carries its unit in the input schema; rates are decimals.

Output parameters:

- `inputs`
- `manifest`
- `model_id`
- `model_version`
- `outputs`
- `warnings` (array)

### `foundations_time_value` (~130 tokens)

Time value of money

Present and future values of sums, annuities and perpetuities, the five-key solve, NPV, IRR, XNPV, XIRR and amortization schedules. Runs Time value of money (foundations.time_value, version 2) on the given inputs and returns its canonical result: the validated inputs, the outputs, the warnings and the manifest. The required calculation field selects one of: amortization, future_value, irr, npv, present_value, solve, xirr, xnpv. Every number carries its unit in the input schema; rates are decimals.

Output parameters:

- `inputs`
- `manifest`
- `model_id`
- `model_version`
- `outputs`
- `warnings` (array)

### `get_series` (~185 tokens)

Series

Reads a series from the data catalog (a concept id) or from one provider (provider:series), with its source records and the attributions it must be shown with: at most the server's limit of observations, the most recent ones. Data whose terms do not let it reach an AI assistant is never returned.

Input parameters:

- `as_of` (string): Read the data as published on this date.
- `end` (string): The last observation date wanted.
- `provider` (string): For a concept, only this provider's candidates.
- `start` (string): The first observation date wanted.
- `target` (string, required): A catalog concept id (such as us.unemployment.rate) or provider:series (such as bls:LNS14000000).
- `vintage` (string): A vintage label: latest, first_release, all or as_of:YYYY-MM-DD.

Output parameters:

- `attributions` (array)
- `concept` (string|null)
- `frame` (object)
- `skipped` (array)
- `sources` (array)

### `international_parity_conditions` (~117 tokens)

International parity conditions

Covered and uncovered interest parity, relative and absolute purchasing power parity, the international Fisher effect and real exchange rates. Runs International parity conditions (international.parity_conditions, version 1) on the given inputs and returns its canonical result: the validated inputs, the outputs, the warnings and the manifest. The required calculation field selects one of: absolute_ppp, covered_interest_parity, international_fisher, real_exchange_rate, relative_ppp, uncovered_interest_parity. Every number carries its unit in the input schema; rates are decimals.

Output parameters:

- `inputs`
- `manifest`
- `model_id`
- `model_version`
- `outputs`
- `warnings` (array)

### `list_sources` (~55 tokens)

Data sources

Lists every data provider with its licence class, whether its terms let its data reach an AI assistant (llm_use) and whether this server's policy permits it, its attribution and its terms page, and whether a key is configured.

Output parameters:

- `sources` (array)

### `macro_policy_rule` (~147 tokens)

Monetary-policy rules

Taylor (1993 and 1999), balanced-approach, shortfalls, adjusted and first-difference rules, smoothed and floored, on a gap measured in output or unemployment, and over forecast paths. Runs Monetary-policy rules (macro.policy_rule, version 1) on the given inputs and returns its canonical result: the validated inputs, the outputs, the warnings and the manifest. The required calculation field selects one of: adjusted_taylor_1993, balanced_approach, balanced_approach_shortfalls, first_difference, path, taylor_1993, taylor_1999. Every number carries its unit in the input schema; rates are decimals.

Output parameters:

- `inputs`
- `manifest`
- `model_id`
- `model_version`
- `outputs`
- `warnings` (array)

### `performance_risk_adjusted` (~191 tokens)

Risk-adjusted performance

Sharpe, Sortino, Treynor, Jensen's alpha, information ratio and tracking error, M², Calmar and up- and down-capture ratios from return series. Runs Risk-adjusted performance (performance.risk_adjusted, version 1) on the given inputs and returns its canonical result: the validated inputs, the outputs, the warnings and the manifest. Every number carries its unit in the input schema; rates are decimals.

Input parameters:

- `benchmark_returns` (array, required): Benchmark return each period, aligned with the portfolio's
- `minimum_acceptable_return` (number): Minimum acceptable return per period, for the Sortino ratio
- `periods_per_year` (number, required): Periods in a year, such as 12 or 252
- `returns` (array, required): Portfolio return each period
- `risk_free_returns` (array): Risk-free return each period; omit for zero

Output parameters:

- `inputs`
- `manifest`
- `model_id`
- `model_version`
- `outputs`
- `warnings` (array)

### `portfolio_mean_variance` (~106 tokens)

Mean-variance portfolios

Portfolio expected return and risk, the minimum-variance frontier with short sales, and the minimum-variance and tangency portfolios. Runs Mean-variance portfolios (portfolio.mean_variance, version 1) on the given inputs and returns its canonical result: the validated inputs, the outputs, the warnings and the manifest. The required calculation field selects one of: frontier, minimum_variance, portfolio, tangency. Every number carries its unit in the input schema; rates are decimals.

Output parameters:

- `inputs`
- `manifest`
- `model_id`
- `model_version`
- `outputs`
- `warnings` (array)

### `risk_value_at_risk` (~123 tokens)

Value-at-risk and expected shortfall

VaR and expected shortfall as positive losses by the parametric normal, Cornish-Fisher, historical, Monte Carlo and RiskMetrics EWMA methods. Runs Value-at-risk and expected shortfall (risk.value_at_risk, version 1) on the given inputs and returns its canonical result: the validated inputs, the outputs, the warnings and the manifest. The required calculation field selects one of: cornish_fisher, ewma, historical, monte_carlo, parametric. Every number carries its unit in the input schema; rates are decimals.

Output parameters:

- `inputs`
- `manifest`
- `model_id`
- `model_version`
- `outputs`
- `warnings` (array)

### `run_model` (~222 tokens)

Model run

Runs any registered model on its inputs, or binds its inputs to the data catalog first (as of a date, or the latest), and returns the canonical result: the validated inputs, the outputs, the warnings and the manifest of every source read. Data whose terms do not let it reach an AI assistant is never used.

Input parameters:

- `as_of` (string): Bind the model's data as published on this date (YYYY-MM-DD).
- `concepts` (object): Field names mapped to catalog concept ids that replace their bindings' concepts.
- `inputs` (object): The model's inputs, as its input schema (describe_model) gives them. With a bind, each one given replaces the value the data would supply.
- `model_id` (string, required): A model id, or an alias of one.
- `parameters` (object): Values of the bound concepts' parameters.
- `profile` (string): The named set of bindings to read; 'default' binds the latest data.
- `vintage`: The vintage policy of every binding, in place of their own.

Output parameters:

- `inputs` (object)
- `manifest`
- `model_id` (string)
- `model_version` (integer)
- `outputs` (object)
- `warnings` (array)

### `search_models` (~138 tokens)

Model search

Searches the registered economics and finance models by words in their ids, titles, tags, domains and summaries, best match first, or lists every model of a domain. Each entry gives the model's id, title, summary, domain, cost class and whether it can bind its inputs to data.

Input parameters:

- `domain`: Only the models of this domain.
- `limit` (integer): The most entries a search returns, best first.
- `query` (string): Words to look for in each model's id, title, tags, domain and summary. Without it, every model of the domain (or every model) is listed, sorted by id.

Output parameters:

- `models` (array)

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/pyeconomics-dev-pyeconomics/pyeconomics#diagnostics

## Score history

- 2026-11-06: 72
- 2026-11-05: 83
- 2026-11-04: 68
- 2026-11-03: 68
- 2026-11-02: 83
- 2026-11-01: 68
- 2026-10-31: 68
- 2026-10-30: 68
- 2026-10-29: 83
- 2026-10-28: 68

## Common questions

### What is the pyeconomics MCP server?

pyeconomics is an MCP server listed in the public MCP registry as io.github.pyeconomics-dev/pyeconomics. Tested, cited economics and finance models and data, with a provenance manifest per result. This page covers its PyPI package (pyeconomics).

### Is the pyeconomics MCP server safe to use?

pyeconomics scores 72 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 6 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the pyeconomics MCP server expose?

pyeconomics exposes 21 tools: corporate_capital_budgeting, corporate_cost_of_capital, derivatives_binomial_tree, derivatives_black_scholes_merton, describe_model, and 16 more. Their descriptions and schemas cost roughly 2,747 tokens of context every time the server is loaded.

### Is the pyeconomics MCP server still maintained?

pyeconomics is still listed as active in the MCP registry. We last reached this channel on 6 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the pyeconomics MCP server under?

pyeconomics declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

### What did VerifyMCP test on the pyeconomics MCP server?

VerifyMCP ran 16 checks on pyeconomics, covering Known CVEs, Install scripts, Dependency health, Source repository and 12 more. One item could not be completed, a gap on our side rather than a finding about pyeconomics: Malware scan. Endpoint Security and Transport & Reachability do not apply to a PyPI package, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- PyPI project: https://pypi.org/project/pyeconomics/
- Socket report: https://socket.dev/pypi/package/pyeconomics
- Repository: https://github.com/pyeconomics-dev/pyeconomics
- Website: https://pyeconomics.readthedocs.io/en/main/mcp.html
- Changelog RSS feed: https://verifymcp.io/servers/pyeconomics-dev-pyeconomics/pyeconomics.xml
- Changelog JSON feed: https://verifymcp.io/servers/pyeconomics-dev-pyeconomics/pyeconomics/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/pyeconomics-dev-pyeconomics/pyeconomics.json
- HTML version of this page: https://verifymcp.io/servers/pyeconomics-dev-pyeconomics/pyeconomics
