financetoolkit 2.1.2__tar.gz → 2.1.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/.gitignore +3 -0
  2. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/PKG-INFO +37 -25
  3. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/README.md +36 -24
  4. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/helpers.py +1 -1
  5. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/historical_model.py +4 -2
  6. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/mcp_server/config.yaml +24 -0
  7. financetoolkit-2.1.3/financetoolkit/mcp_server/mcpb/LICENSE +21 -0
  8. financetoolkit-2.1.3/financetoolkit/mcp_server/mcpb/build-mcpb.sh +69 -0
  9. financetoolkit-2.1.3/financetoolkit/mcp_server/mcpb/manifest.json +178 -0
  10. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/mcp_server/mcpb/pyproject.toml +2 -2
  11. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/mcp_server/registry_controller.py +0 -1
  12. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/mcp_server/tools_model.py +0 -1
  13. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/models/models_controller.py +269 -89
  14. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/performance/performance_controller.py +1 -1
  15. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/ratios/helpers.py +1 -1
  16. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/ratios/ratios_controller.py +214 -87
  17. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/risk/risk_model.py +2 -2
  18. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/pyproject.toml +2 -1
  19. financetoolkit-2.1.2/financetoolkit/mcp_server/mcpb/build-mcpb.sh +0 -45
  20. financetoolkit-2.1.2/financetoolkit/mcp_server/mcpb/manifest.json +0 -178
  21. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/LICENSE.txt +0 -0
  22. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/__init__.py +0 -0
  23. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/currencies_model.py +0 -0
  24. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/discovery/__init__.py +0 -0
  25. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/discovery/discovery_controller.py +0 -0
  26. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/discovery/discovery_model.py +0 -0
  27. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/economics/__init__.py +0 -0
  28. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/economics/economics_controller.py +0 -0
  29. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/economics/gmdb_model.py +0 -0
  30. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/economics/oecd_model.py +0 -0
  31. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/fixedincome/__init__.py +0 -0
  32. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/fixedincome/bond_model.py +0 -0
  33. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/fixedincome/derivative_model.py +0 -0
  34. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/fixedincome/ecb_model.py +0 -0
  35. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/fixedincome/euribor_model.py +0 -0
  36. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/fixedincome/fed_model.py +0 -0
  37. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/fixedincome/fixedincome_controller.py +0 -0
  38. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/fixedincome/fred_model.py +0 -0
  39. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/fixedincome/helpers.py +0 -0
  40. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/fmp_model.py +0 -0
  41. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/fundamentals_model.py +0 -0
  42. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/mcp_server/__init__.py +0 -0
  43. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/mcp_server/__main__.py +0 -0
  44. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/mcp_server/auth_model.py +0 -0
  45. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/mcp_server/cache_model.py +0 -0
  46. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/mcp_server/coercion_model.py +0 -0
  47. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/mcp_server/formatting_model.py +0 -0
  48. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/mcp_server/inspection_controller.py +0 -0
  49. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/mcp_server/mcp_controller.py +0 -0
  50. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/mcp_server/mcpb/.mcpbignore +0 -0
  51. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/mcp_server/mcpb/README.md +0 -0
  52. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/mcp_server/mcpb/finance_toolkit_icon.png +0 -0
  53. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/mcp_server/provider_model.py +0 -0
  54. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/mcp_server/setup_model.py +0 -0
  55. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/models/__init__.py +0 -0
  56. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/models/altman_model.py +0 -0
  57. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/models/dupont_model.py +0 -0
  58. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/models/enterprise_model.py +0 -0
  59. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/models/growth_model.py +0 -0
  60. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/models/helpers.py +0 -0
  61. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/models/intrinsic_model.py +0 -0
  62. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/models/piotroski_model.py +0 -0
  63. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/models/wacc_model.py +0 -0
  64. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/normalization/balance.csv +0 -0
  65. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/normalization/balance_yf.csv +0 -0
  66. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/normalization/cash.csv +0 -0
  67. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/normalization/cash_yf.csv +0 -0
  68. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/normalization/income.csv +0 -0
  69. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/normalization/income_yf.csv +0 -0
  70. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/normalization/statistics.csv +0 -0
  71. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/normalization_model.py +0 -0
  72. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/options/__init__.py +0 -0
  73. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/options/binomial_trees_model.py +0 -0
  74. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/options/black_scholes_model.py +0 -0
  75. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/options/greeks_model.py +0 -0
  76. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/options/helpers.py +0 -0
  77. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/options/options_controller.py +0 -0
  78. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/options/options_model.py +0 -0
  79. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/performance/__init__.py +0 -0
  80. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/performance/helpers.py +0 -0
  81. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/performance/performance_model.py +0 -0
  82. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/portfolio/__init__.py +0 -0
  83. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/portfolio/config.yaml +0 -0
  84. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/portfolio/example_datasets/example_portfolio.csv +0 -0
  85. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/portfolio/example_datasets/example_portfolio.xlsx +0 -0
  86. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/portfolio/helpers.py +0 -0
  87. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/portfolio/overview_model.py +0 -0
  88. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/portfolio/portfolio_controller.py +0 -0
  89. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/portfolio/portfolio_model.py +0 -0
  90. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/ratios/__init__.py +0 -0
  91. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/ratios/efficiency_model.py +0 -0
  92. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/ratios/liquidity_model.py +0 -0
  93. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/ratios/profitability_model.py +0 -0
  94. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/ratios/solvency_model.py +0 -0
  95. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/ratios/valuation_model.py +0 -0
  96. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/risk/__init__.py +0 -0
  97. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/risk/cvar_model.py +0 -0
  98. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/risk/evar_model.py +0 -0
  99. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/risk/garch_model.py +0 -0
  100. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/risk/helpers.py +0 -0
  101. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/risk/risk_controller.py +0 -0
  102. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/risk/var_model.py +0 -0
  103. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/technicals/__init__.py +0 -0
  104. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/technicals/breadth_model.py +0 -0
  105. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/technicals/helpers.py +0 -0
  106. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/technicals/momentum_model.py +0 -0
  107. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/technicals/overlap_model.py +0 -0
  108. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/technicals/statistic_model.py +0 -0
  109. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/technicals/technicals_controller.py +0 -0
  110. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/technicals/volatility_model.py +0 -0
  111. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/toolkit_controller.py +0 -0
  112. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/utilities/cache_model.py +0 -0
  113. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/utilities/error_model.py +0 -0
  114. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/utilities/logger_model.py +0 -0
  115. {financetoolkit-2.1.2 → financetoolkit-2.1.3}/financetoolkit/yfinance_model.py +0 -0
@@ -26,6 +26,9 @@ debugging.py
26
26
  .claude/
27
27
  *.sh
28
28
 
29
+ # Claude
30
+ CLAUDE.md
31
+
29
32
  # Specific files for the MCP Bundle
30
33
  !financetoolkit/mcp_server/mcpb/build-mcpb.sh
31
34
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: financetoolkit
3
- Version: 2.1.2
3
+ Version: 2.1.3
4
4
  Summary: Transparent and Efficient Financial Analysis
5
5
  Author: Jeroen Bouma
6
6
  License: MIT
@@ -58,18 +58,14 @@ Beyond Equities, it supports Options, Currencies, Cryptocurrencies, ETFs, Mutual
58
58
  Complementing this is the [Finance Database 🌎](https://github.com/JerBouma/FinanceDatabase), a database featuring 300.000+ symbols containing Equities, ETFs, Funds, Indices, Currencies, Cryptocurrencies and Money Markets. By utilising both, it is possible to do a fully-fledged competitive analysis with the tickers found from the FinanceDatabase inputted into the FinanceToolkit.
59
59
 
60
60
  ___
61
- **🔌 The Finance Toolkit is also available as a hosted [MCP Server](https://www.jeroenbouma.com/projects/financetoolkit/mcp)**
61
+ **🔌 The Finance Toolkit is also available as an [MCP Server](https://www.jeroenbouma.com/projects/financetoolkit/mcp)**
62
62
 
63
- Simply point any MCP-compatible AI assistant (like *Claude, GitHub Copilot, Cursor, or Windsurf*) to:
63
+ Query 200+ metrics from Claude, Copilot, Cursor, Windsurf or any MCP-compatible client without writing code.
64
64
 
65
- `https://financetoolkit.jeroenbouma.com/mcp`
65
+ - **Hosted:** connect to `https://financetoolkit.jeroenbouma.com/mcp` — OAuth handles the rest on first use.
66
+ - **Local:** `uvx --from "financetoolkit[mcp]" financetoolkit-mcp-setup` — sets up your client config and API key automatically. See [MCP Server Documentation](https://www.jeroenbouma.com/projects/financetoolkit/mcp#local-clients) for manual setup.
66
67
 
67
- Key features:
68
- * **⚡ No Local Installation Required:** The server runs completely in the cloud.
69
- * **🔐 Secure OAuth:** Authenticates safely on your very first connection.
70
- * **📊 Conversational Data:** Query over 200+ financial metrics naturally.
71
-
72
- Also available on [Smithery](https://smithery.ai/servers/jer-bouma/financetoolkit), [Glama](https://glama.ai/mcp/servers/JerBouma/FinanceToolkit),[ MCP Servers](https://mcpservers.org/servers/jerbouma/financetoolkit) and more.
68
+ Also on [Smithery](https://smithery.ai/servers/jer-bouma/financetoolkit), [Glama](https://glama.ai/mcp/servers/JerBouma/FinanceToolkit), [MCP Servers](https://mcpservers.org/servers/jerbouma/financetoolkit) and more.
73
69
  ___
74
70
 
75
71
  # Table of Contents
@@ -3124,32 +3120,48 @@ This returns a rather large DataFrame so to keep it concise, only the first 5 ti
3124
3120
 
3125
3121
  # MCP Server
3126
3122
 
3127
- The Finance Toolkit MCP Server exposes 200+ financial metrics, models, and economic indicators directly to any AI assistant that supports the Model Context Protocol including Claude Desktop & Code, GitHub Copilot, Cursor and Windsurf.
3123
+ The Finance Toolkit MCP Server exposes 200+ financial metrics, models, and economic indicators directly to any AI assistant that supports the [Model Context Protocol](https://modelcontextprotocol.io) (MCP). Ask questions in plain English — the AI fetches live financial data on your behalf, backed by the transparent, open-source calculation methods of the Finance Toolkit.
3128
3124
 
3129
- **Option 1: Remote server (all clients, no installation):** Connect directly to the hosted server. Nothing needs to be installed locally. On first connection your client opens an OAuth consent page asking for your FMP API key; enter it once and the server handles authentication from there. Add the URL as a remote HTTP MCP server in your client's settings or config file.
3125
+ See an example of the Finance Toolkit MCP server in action in Claude Desktop below:
3130
3126
 
3131
- ___
3132
- <b><div align="center">MCP Server URL: <code>https://financetoolkit.jeroenbouma.com/mcp</code></div></b>
3133
- ___
3127
+ https://github.com/user-attachments/assets/96ad5288-d83d-4497-a345-1841c48c29d5
3134
3128
 
3129
+ ### Remote server
3135
3130
 
3136
- **Option 2: One-click install (Claude Desktop):** Download the MCP Bundle and open it with Claude Desktop. An installation dialog will appear and prompt you for your API key. No terminal required.
3131
+ Connect directly to the hosted server at `https://financetoolkit.jeroenbouma.com/mcp`. Nothing needs to be installed locally. On first connection your client opens an OAuth consent page asking for your FMP API key; enter it once and the server handles authentication from there.
3137
3132
 
3138
- ___
3139
- <b><div align="center">Download the Finance Toolkit MCP Bundle <a href="https://github.com/JerBouma/FinanceToolkit/releases/latest/download/financetoolkit.mcpb">here</a>.</div></b>
3140
- ___
3133
+ | Client | Steps |
3134
+ |:---|:---|
3135
+ | **Claude Desktop** | Customize → Connectors → Add custom connector → paste the URL |
3136
+ | **Claude.ai** | Customize → Connectors → Add custom connector → paste the URL |
3137
+ | **Claude Code** | `claude mcp add --transport http finance-toolkit https://financetoolkit.jeroenbouma.com/mcp` |
3138
+ | **VS Code** | Command Palette → MCP: Add Server → HTTP → paste the URL |
3139
+ | **Cursor** | Settings → Features → MCP Servers → Add new → http → paste the URL |
3140
+ | **Windsurf** | Settings → MCP Servers → Add Server → Remote/HTTP → paste the URL |
3141
3141
 
3142
- **Option 3: Local installation (all clients):** Run the one-line setup wizard and it will configure your AI client automatically:
3142
+ ### Local installation
3143
3143
 
3144
- ```
3144
+ Run the setup wizard — it locates your client's config file and writes the MCP entry automatically, including the API key:
3145
+
3146
+ ```bash
3145
3147
  uvx --from "financetoolkit[mcp]" financetoolkit-mcp-setup
3146
3148
  ```
3147
3149
 
3148
- After running this command the wizard will launch and walk you through the rest of the setup interactively. For more information, see the [MCP Documentation](https://www.jeroenbouma.com/projects/financetoolkit/mcp) which also contains example prompts to get you started.
3149
-
3150
- See an example of the Finance Toolkit MCP server in action in Claude Desktop below:
3150
+ For manual config, add the following to your client's MCP config file (e.g. `claude_desktop_config.json`, `.cursor/mcp.json`, `.vscode/mcp.json`):
3151
+
3152
+ ```json
3153
+ {
3154
+ "mcpServers": {
3155
+ "finance-toolkit": {
3156
+ "command": "uvx",
3157
+ "args": ["--from", "financetoolkit[mcp]", "financetoolkit-mcp"],
3158
+ "env": { "FINANCIAL_MODELING_PREP_API_KEY": "YOUR_API_KEY_HERE" }
3159
+ }
3160
+ }
3161
+ }
3162
+ ```
3151
3163
 
3152
- https://github.com/user-attachments/assets/96ad5288-d83d-4497-a345-1841c48c29d5
3164
+ Alternatively, download the [Finance Toolkit MCPB bundle](https://github.com/JerBouma/FinanceToolkit/releases/latest/download/financetoolkit.mcpb) and open it with Claude Desktop. An installation dialog will prompt for your FMP API key.
3153
3165
 
3154
3166
  # Questions & Answers
3155
3167
 
@@ -24,18 +24,14 @@ Beyond Equities, it supports Options, Currencies, Cryptocurrencies, ETFs, Mutual
24
24
  Complementing this is the [Finance Database 🌎](https://github.com/JerBouma/FinanceDatabase), a database featuring 300.000+ symbols containing Equities, ETFs, Funds, Indices, Currencies, Cryptocurrencies and Money Markets. By utilising both, it is possible to do a fully-fledged competitive analysis with the tickers found from the FinanceDatabase inputted into the FinanceToolkit.
25
25
 
26
26
  ___
27
- **🔌 The Finance Toolkit is also available as a hosted [MCP Server](https://www.jeroenbouma.com/projects/financetoolkit/mcp)**
27
+ **🔌 The Finance Toolkit is also available as an [MCP Server](https://www.jeroenbouma.com/projects/financetoolkit/mcp)**
28
28
 
29
- Simply point any MCP-compatible AI assistant (like *Claude, GitHub Copilot, Cursor, or Windsurf*) to:
29
+ Query 200+ metrics from Claude, Copilot, Cursor, Windsurf or any MCP-compatible client without writing code.
30
30
 
31
- `https://financetoolkit.jeroenbouma.com/mcp`
31
+ - **Hosted:** connect to `https://financetoolkit.jeroenbouma.com/mcp` — OAuth handles the rest on first use.
32
+ - **Local:** `uvx --from "financetoolkit[mcp]" financetoolkit-mcp-setup` — sets up your client config and API key automatically. See [MCP Server Documentation](https://www.jeroenbouma.com/projects/financetoolkit/mcp#local-clients) for manual setup.
32
33
 
33
- Key features:
34
- * **⚡ No Local Installation Required:** The server runs completely in the cloud.
35
- * **🔐 Secure OAuth:** Authenticates safely on your very first connection.
36
- * **📊 Conversational Data:** Query over 200+ financial metrics naturally.
37
-
38
- Also available on [Smithery](https://smithery.ai/servers/jer-bouma/financetoolkit), [Glama](https://glama.ai/mcp/servers/JerBouma/FinanceToolkit),[ MCP Servers](https://mcpservers.org/servers/jerbouma/financetoolkit) and more.
34
+ Also on [Smithery](https://smithery.ai/servers/jer-bouma/financetoolkit), [Glama](https://glama.ai/mcp/servers/JerBouma/FinanceToolkit), [MCP Servers](https://mcpservers.org/servers/jerbouma/financetoolkit) and more.
39
35
  ___
40
36
 
41
37
  # Table of Contents
@@ -3090,32 +3086,48 @@ This returns a rather large DataFrame so to keep it concise, only the first 5 ti
3090
3086
 
3091
3087
  # MCP Server
3092
3088
 
3093
- The Finance Toolkit MCP Server exposes 200+ financial metrics, models, and economic indicators directly to any AI assistant that supports the Model Context Protocol including Claude Desktop & Code, GitHub Copilot, Cursor and Windsurf.
3089
+ The Finance Toolkit MCP Server exposes 200+ financial metrics, models, and economic indicators directly to any AI assistant that supports the [Model Context Protocol](https://modelcontextprotocol.io) (MCP). Ask questions in plain English — the AI fetches live financial data on your behalf, backed by the transparent, open-source calculation methods of the Finance Toolkit.
3094
3090
 
3095
- **Option 1: Remote server (all clients, no installation):** Connect directly to the hosted server. Nothing needs to be installed locally. On first connection your client opens an OAuth consent page asking for your FMP API key; enter it once and the server handles authentication from there. Add the URL as a remote HTTP MCP server in your client's settings or config file.
3091
+ See an example of the Finance Toolkit MCP server in action in Claude Desktop below:
3096
3092
 
3097
- ___
3098
- <b><div align="center">MCP Server URL: <code>https://financetoolkit.jeroenbouma.com/mcp</code></div></b>
3099
- ___
3093
+ https://github.com/user-attachments/assets/96ad5288-d83d-4497-a345-1841c48c29d5
3100
3094
 
3095
+ ### Remote server
3101
3096
 
3102
- **Option 2: One-click install (Claude Desktop):** Download the MCP Bundle and open it with Claude Desktop. An installation dialog will appear and prompt you for your API key. No terminal required.
3097
+ Connect directly to the hosted server at `https://financetoolkit.jeroenbouma.com/mcp`. Nothing needs to be installed locally. On first connection your client opens an OAuth consent page asking for your FMP API key; enter it once and the server handles authentication from there.
3103
3098
 
3104
- ___
3105
- <b><div align="center">Download the Finance Toolkit MCP Bundle <a href="https://github.com/JerBouma/FinanceToolkit/releases/latest/download/financetoolkit.mcpb">here</a>.</div></b>
3106
- ___
3099
+ | Client | Steps |
3100
+ |:---|:---|
3101
+ | **Claude Desktop** | Customize → Connectors → Add custom connector → paste the URL |
3102
+ | **Claude.ai** | Customize → Connectors → Add custom connector → paste the URL |
3103
+ | **Claude Code** | `claude mcp add --transport http finance-toolkit https://financetoolkit.jeroenbouma.com/mcp` |
3104
+ | **VS Code** | Command Palette → MCP: Add Server → HTTP → paste the URL |
3105
+ | **Cursor** | Settings → Features → MCP Servers → Add new → http → paste the URL |
3106
+ | **Windsurf** | Settings → MCP Servers → Add Server → Remote/HTTP → paste the URL |
3107
3107
 
3108
- **Option 3: Local installation (all clients):** Run the one-line setup wizard and it will configure your AI client automatically:
3108
+ ### Local installation
3109
3109
 
3110
- ```
3110
+ Run the setup wizard — it locates your client's config file and writes the MCP entry automatically, including the API key:
3111
+
3112
+ ```bash
3111
3113
  uvx --from "financetoolkit[mcp]" financetoolkit-mcp-setup
3112
3114
  ```
3113
3115
 
3114
- After running this command the wizard will launch and walk you through the rest of the setup interactively. For more information, see the [MCP Documentation](https://www.jeroenbouma.com/projects/financetoolkit/mcp) which also contains example prompts to get you started.
3115
-
3116
- See an example of the Finance Toolkit MCP server in action in Claude Desktop below:
3116
+ For manual config, add the following to your client's MCP config file (e.g. `claude_desktop_config.json`, `.cursor/mcp.json`, `.vscode/mcp.json`):
3117
+
3118
+ ```json
3119
+ {
3120
+ "mcpServers": {
3121
+ "finance-toolkit": {
3122
+ "command": "uvx",
3123
+ "args": ["--from", "financetoolkit[mcp]", "financetoolkit-mcp"],
3124
+ "env": { "FINANCIAL_MODELING_PREP_API_KEY": "YOUR_API_KEY_HERE" }
3125
+ }
3126
+ }
3127
+ }
3128
+ ```
3117
3129
 
3118
- https://github.com/user-attachments/assets/96ad5288-d83d-4497-a345-1841c48c29d5
3130
+ Alternatively, download the [Finance Toolkit MCPB bundle](https://github.com/JerBouma/FinanceToolkit/releases/latest/download/financetoolkit.mcpb) and open it with Claude Desktop. An installation dialog will prompt for your FMP API key.
3119
3131
 
3120
3132
  # Questions & Answers
3121
3133
 
@@ -315,7 +315,7 @@ def enrich_historical_data(
315
315
  historical_data["Cumulative Return"] = pd.Series(np.nan).astype(float)
316
316
 
317
317
  historical_data.loc[start:end, "Cumulative Return"] = (
318
- 1.0 + adjusted_return
318
+ 1.0 + adjusted_return.fillna(0)
319
319
  ).cumprod()
320
320
 
321
321
  return historical_data
@@ -374,7 +374,7 @@ def convert_daily_to_other_period(
374
374
  period_historical_data["Adj Close"]
375
375
  / period_historical_data["Adj Close"].shift()
376
376
  - 1
377
- )
377
+ ).replace([np.inf, -np.inf], np.nan)
378
378
 
379
379
  # Volatility is calculated as the daily volatility multiplied by the
380
380
  # square root of the number of trading days (252)
@@ -404,7 +404,9 @@ def convert_daily_to_other_period(
404
404
  adjusted_return = period_historical_data.loc[start:end, "Return"].copy()
405
405
  adjusted_return.iloc[0] = 0
406
406
 
407
- period_historical_data["Cumulative Return"] = (1 + adjusted_return).cumprod()
407
+ period_historical_data["Cumulative Return"] = (
408
+ 1 + adjusted_return.fillna(0)
409
+ ).cumprod()
408
410
  period_historical_data["Cumulative Return"] = period_historical_data[
409
411
  "Cumulative Return"
410
412
  ].fillna(1)
@@ -490,6 +490,30 @@ tool_groups:
490
490
  use_direct_methods: true
491
491
 
492
492
 
493
+ # ──────────────────────────────────────────────────────────────────────────────
494
+ # Utility tools (search / discovery helpers — not router groups)
495
+ # These are registered by UtilityToolRegistry in tools_model.py.
496
+ # Listed here so build-mcpb.sh can include them in the manifest without
497
+ # hard-coding them in the build script.
498
+ #
499
+ # summary (optional on any tool): Short description used in the mcpb
500
+ # marketplace listing. Falls back to description if absent. description is
501
+ # the AI-facing prompt hint and may be verbose.
502
+ # ──────────────────────────────────────────────────────────────────────────────
503
+ utility_tools:
504
+ - tool_name: "search_categories"
505
+ description: "List all available metric categories with tool counts and descriptions."
506
+
507
+ - tool_name: "search_by_category"
508
+ description: "List all metrics within a specific category by name."
509
+
510
+ - tool_name: "search_metrics"
511
+ description: "Fuzzy keyword search across all 200+ available metrics."
512
+
513
+ - tool_name: "search_instruments"
514
+ description: "Look up ticker symbols by company name, ISIN, CIK, CUSIP, or keyword."
515
+
516
+
493
517
  # ──────────────────────────────────────────────────────────────────────────────
494
518
  # Blocked period values per tool
495
519
  # Some tool groups cannot meaningfully compute results at "daily" granularity
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Jeroen Bouma
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env bash
2
+ # Builds financetoolkit.mcpb and places it in dist/.
3
+ set -euo pipefail
4
+
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ BUNDLE_DIR="$SCRIPT_DIR"
7
+ REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
8
+ OUTPUT_DIR="$REPO_ROOT/dist"
9
+
10
+ # Read version from the root pyproject.toml — single source of truth.
11
+ VERSION=$(python3 -c "
12
+ import tomllib
13
+ with open('$REPO_ROOT/pyproject.toml', 'rb') as f:
14
+ print(tomllib.load(f)['project']['version'])
15
+ ")
16
+ echo "Version: $VERSION"
17
+
18
+ OUTPUT_FILE="$OUTPUT_DIR/financetoolkit.mcpb"
19
+
20
+ # Stamp version into pyproject.toml (package version + pinned dependency).
21
+ python3 -c "
22
+ import re, pathlib
23
+ p = pathlib.Path('$BUNDLE_DIR/pyproject.toml')
24
+ content = p.read_text()
25
+ content = re.sub(r'(?m)^version = \".*\"', 'version = \"$VERSION\"', content)
26
+ content = re.sub(r'\"financetoolkit\[mcp\]==.*\"', '\"financetoolkit[mcp]==$VERSION\"', content)
27
+ p.write_text(content)
28
+ "
29
+
30
+ # Regenerate manifest.json from config.yaml — single source of truth.
31
+ # Reads tool_groups and utility_tools; stamps version; writes manifest.json.
32
+ echo "Syncing manifest.json from config.yaml..."
33
+ CONFIG_YAML="$REPO_ROOT/financetoolkit/mcp_server/config.yaml" \
34
+ MANIFEST_JSON="$BUNDLE_DIR/manifest.json" \
35
+ VERSION="$VERSION" \
36
+ uv run --with pyyaml --no-project python3 << 'PYEOF'
37
+ import json, os, pathlib, yaml
38
+
39
+ config = yaml.safe_load(pathlib.Path(os.environ["CONFIG_YAML"]).read_text())
40
+ mpath = pathlib.Path(os.environ["MANIFEST_JSON"])
41
+ manifest = json.loads(mpath.read_text())
42
+
43
+ def _entry(group):
44
+ return {
45
+ "name": group["tool_name"],
46
+ "description": group.get("summary", group["description"]),
47
+ }
48
+
49
+ tools = [_entry(g) for g in config.get("tool_groups", [])]
50
+ tools += [_entry(u) for u in config.get("utility_tools", [])]
51
+
52
+ manifest["version"] = os.environ["VERSION"]
53
+ manifest["tools"] = tools
54
+ mpath.write_text(json.dumps(manifest, indent=2) + "\n")
55
+ print(f" {len(tools)} tools written, version {os.environ['VERSION']}.")
56
+ PYEOF
57
+
58
+ mkdir -p "$OUTPUT_DIR"
59
+
60
+ cd "$BUNDLE_DIR"
61
+ mcpb pack .
62
+ BUNDLE_FILE=$(ls "$BUNDLE_DIR"/*.mcpb 2>/dev/null | head -1)
63
+ mv "$BUNDLE_FILE" "$OUTPUT_FILE"
64
+
65
+ echo ""
66
+ echo "Bundle written to $OUTPUT_FILE"
67
+ echo ""
68
+ echo "To install: open $OUTPUT_FILE with Claude Desktop."
69
+ echo "To publish: attach $OUTPUT_FILE to a GitHub release."
@@ -0,0 +1,178 @@
1
+ {
2
+ "manifest_version": "0.4",
3
+ "name": "finance-toolkit",
4
+ "display_name": "Finance Toolkit",
5
+ "version": "2.1.3",
6
+ "description": "Give AI assistants access to 200+ financial metrics calculated transparently from raw financial statements, not pulled from third-party endpoints.",
7
+ "long_description": "The Finance Toolkit gives AI assistants access to 200+ financial metrics calculated transparently from raw financial statements. This includes financial statements, historical prices, analyst estimates, 80+ fundamental ratios, 30+ technical indicators, 20+ risk and performance metrics, and 50+ macro and fixed income indicators.\n\nA Financial Modeling Prep API key is required to access 30+ years of financial data. Obtain one at [jeroenbouma.com/fmp](https://jeroenbouma.com/fmp). Authenticate once via OAuth, no key is stored on the server. Rate limit fallback to Yahoo Finance is built in, and macro databases from OECD and GMDB are accessed independently.",
8
+ "author": {
9
+ "name": "Jeroen Bouma",
10
+ "email": "jer.bouma@gmail.com",
11
+ "url": "https://www.jeroenbouma.com"
12
+ },
13
+ "icon": "finance_toolkit_icon.png",
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "https://github.com/JerBouma/FinanceToolkit"
17
+ },
18
+ "homepage": "https://www.jeroenbouma.com/projects/financetoolkit/mcp",
19
+ "documentation": "https://www.jeroenbouma.com/projects/financetoolkit/mcp",
20
+ "support": "https://github.com/JerBouma/FinanceToolkit/issues",
21
+ "license": "MIT",
22
+ "keywords": [
23
+ "finance",
24
+ "financial",
25
+ "stocks",
26
+ "equities",
27
+ "ratios",
28
+ "economics",
29
+ "indicators",
30
+ "options",
31
+ "fixed-income",
32
+ "technical-analysis",
33
+ "risk",
34
+ "performance",
35
+ "esg"
36
+ ],
37
+ "server": {
38
+ "type": "uv",
39
+ "entry_point": "financetoolkit/mcp_server/mcp_controller.py",
40
+ "mcp_config": {
41
+ "command": "uv",
42
+ "args": [
43
+ "run",
44
+ "--directory",
45
+ "${__dirname}",
46
+ "-m",
47
+ "financetoolkit.mcp_server.mcp_controller"
48
+ ],
49
+ "env": {
50
+ "FINANCIAL_MODELING_PREP_API_KEY": "${user_config.api_key}"
51
+ }
52
+ }
53
+ },
54
+ "user_config": {
55
+ "api_key": {
56
+ "type": "string",
57
+ "title": "Financial Modeling Prep API Key",
58
+ "description": "Obtain a key at https://www.jeroenbouma.com/fmp",
59
+ "required": true,
60
+ "sensitive": true
61
+ }
62
+ },
63
+ "tools": [
64
+ {
65
+ "name": "efficiency",
66
+ "description": "Pre-computed efficiency ratios (asset turnover, inventory turnover, days sales outstanding, days payable outstanding, cash conversion cycle). Requires tickers='AAPL' \u2014 use comma-separated values for multiple tickers. Use instead of raw financial statements. Supports quarterly=true and start_date/end_date."
67
+ },
68
+ {
69
+ "name": "liquidity",
70
+ "description": "Pre-computed liquidity ratios (current ratio, quick ratio, cash ratio, working capital). Requires tickers='AAPL' \u2014 use comma-separated values for multiple tickers. Use instead of raw financial statements. Supports quarterly=true and start_date/end_date."
71
+ },
72
+ {
73
+ "name": "profitability",
74
+ "description": "Pre-computed profitability ratios (gross margin, operating margin, net margin, ROE, ROA, ROIC, ROCE). Requires tickers='AAPL' \u2014 use comma-separated values for multiple tickers. Use instead of raw financial statements. Supports quarterly=true and start_date/end_date."
75
+ },
76
+ {
77
+ "name": "solvency",
78
+ "description": "Pre-computed solvency ratios (debt-to-equity, interest coverage, debt-to-assets, net debt to EBITDA). Requires tickers='AAPL' \u2014 use comma-separated values for multiple tickers. Use instead of raw financial statements. Supports quarterly=true and start_date/end_date."
79
+ },
80
+ {
81
+ "name": "valuation",
82
+ "description": "Pre-computed valuation ratios (P/E, EPS, EV/EBITDA, EV/EBIT, P/B, P/S, PEG, dividend yield, FCF yield, market cap). Requires tickers='AAPL' \u2014 use comma-separated values for multiple tickers. Use instead of raw financial statements. Supports quarterly=true and start_date/end_date."
83
+ },
84
+ {
85
+ "name": "breadth",
86
+ "description": "Market breadth technical indicators (McClellan Oscillator, OBV, Advance/Decline Line, Chaikin). Applied to price data automatically \u2014 no need to fetch prices first. Requires tickers='AAPL' \u2014 use comma-separated values for multiple tickers."
87
+ },
88
+ {
89
+ "name": "momentum",
90
+ "description": "Momentum technical indicators (RSI, MACD, Stochastic Oscillator, Williams %R, Aroon). Applied to price data automatically \u2014 no need to fetch prices first. Requires tickers='AAPL' \u2014 use comma-separated values for multiple tickers."
91
+ },
92
+ {
93
+ "name": "overlap",
94
+ "description": "Overlap technical indicators (SMA, EMA, Bollinger Bands, Keltner Channels). Applied to price data automatically \u2014 no need to fetch prices first. Requires tickers='AAPL' \u2014 use comma-separated values for multiple tickers."
95
+ },
96
+ {
97
+ "name": "volatility",
98
+ "description": "Volatility technical indicators (ATR, True Range). Applied to price data automatically \u2014 no need to fetch prices first. Requires tickers='AAPL' \u2014 use comma-separated values for multiple tickers."
99
+ },
100
+ {
101
+ "name": "models",
102
+ "description": "Pre-computed financial models (WACC, DuPont analysis, Altman Z-Score, Piotroski F-Score, intrinsic value/DCF). Requires tickers='AAPL' \u2014 use comma-separated values for multiple tickers. Supports quarterly=true and start_date/end_date."
103
+ },
104
+ {
105
+ "name": "performance",
106
+ "description": "Pre-computed risk-adjusted performance metrics (Sharpe ratio, Sortino ratio, Alpha, Beta, CAPM, Fama-French factors). Requires tickers='AAPL' \u2014 use comma-separated values for multiple tickers. Does NOT support period='daily'; use weekly, monthly, quarterly, or yearly instead."
107
+ },
108
+ {
109
+ "name": "risk",
110
+ "description": "Pre-computed risk metrics (VaR, CVaR, GARCH volatility, max drawdown, skewness, kurtosis). Requires tickers='AAPL' \u2014 use comma-separated values for multiple tickers. Does NOT support period='daily'; use weekly, monthly, quarterly, or yearly instead."
111
+ },
112
+ {
113
+ "name": "options",
114
+ "description": "Option pricing and Greeks (Black-Scholes model, binomial tree, delta, gamma, theta, vega, rho, implied volatility). Requires tickers='AAPL' \u2014 use comma-separated values for multiple tickers."
115
+ },
116
+ {
117
+ "name": "government",
118
+ "description": "Government fiscal metrics by country (debt, deficit, expenditure, revenue, tax revenue, trust in government). Requires countries='United States' \u2014 use comma-separated values for multiple countries. Do NOT use tickers= for this tool. Supports start_date/end_date and quarterly=true."
119
+ },
120
+ {
121
+ "name": "macroeconomics",
122
+ "description": "Macroeconomic indicators by country (GDP, CPI, inflation rate, trade balance, imports, exports, investment, consumption, business/consumer confidence, house prices, rent prices, exchange rates). Requires countries='United States' \u2014 use comma-separated values for multiple countries. Do NOT use tickers= for this tool. Supports start_date/end_date and quarterly=true."
123
+ },
124
+ {
125
+ "name": "environment",
126
+ "description": "Environmental and ESG data. For ESG scores (E, S, G ratings) use tickers='AAPL'. For carbon footprint and renewable energy data use countries='United States'. This is the only tool that accepts BOTH tickers= and countries= depending on the indicator."
127
+ },
128
+ {
129
+ "name": "jobs",
130
+ "description": "Labour and social metrics by country (unemployment rate, labour productivity, population statistics, poverty rate, income inequality). Requires countries='United States' \u2014 use comma-separated values for multiple countries. Do NOT use tickers= for this tool. Supports start_date/end_date and quarterly=true."
131
+ },
132
+ {
133
+ "name": "rates",
134
+ "description": "Interest rate data (central bank policy rates, short/long-term rates, government bond yields, ICE BofA corporate bond series, EURIBOR, ECB rates, Federal Reserve rates). Requires countries='United States' \u2014 use comma-separated values for multiple countries. Do NOT use tickers= for this tool. Supports start_date/end_date and quarterly=true."
135
+ },
136
+ {
137
+ "name": "fixed_income",
138
+ "description": "Bond and derivative valuation calculations (bond duration, present value, yield-to-maturity, derivative pricing). No tickers or countries needed \u2014 provide bond/derivative parameters (e.g. face_value, coupon_rate, maturity) directly as arguments."
139
+ },
140
+ {
141
+ "name": "discovery",
142
+ "description": "Market discovery tools (lists of stocks/ETFs/cryptocurrencies, stock screener, gainers, losers, sector performance, earnings/dividend calendars). No tickers or countries needed."
143
+ },
144
+ {
145
+ "name": "market_data",
146
+ "description": "Raw financial data (historical prices, income statement, balance sheet, cash flow statement, company profile, quotes, analyst estimates, dividend/earnings calendars, statistics). Use this ONLY for raw data needs \u2014 for pre-computed ratios, performance, risk, or model metrics use the dedicated tools instead. Requires tickers='AAPL' \u2014 use comma-separated values for multiple tickers."
147
+ },
148
+ {
149
+ "name": "search_categories",
150
+ "description": "List all available metric categories with tool counts and descriptions."
151
+ },
152
+ {
153
+ "name": "search_by_category",
154
+ "description": "List all metrics within a specific category by name."
155
+ },
156
+ {
157
+ "name": "search_metrics",
158
+ "description": "Fuzzy keyword search across all 200+ available metrics."
159
+ },
160
+ {
161
+ "name": "search_instruments",
162
+ "description": "Look up ticker symbols by company name, ISIN, CIK, CUSIP, or keyword."
163
+ }
164
+ ],
165
+ "compatibility": {
166
+ "platforms": [
167
+ "darwin",
168
+ "linux",
169
+ "win32"
170
+ ],
171
+ "runtimes": {
172
+ "python": ">=3.10"
173
+ }
174
+ },
175
+ "privacy_policies": [
176
+ "https://site.financialmodelingprep.com/privacy-policy"
177
+ ]
178
+ }
@@ -1,8 +1,8 @@
1
1
  [project]
2
2
  name = "finance-toolkit-mcp"
3
- version = "2.1.1"
3
+ version = "2.1.3"
4
4
  description = "Finance Toolkit MCP Server"
5
5
  requires-python = ">=3.10"
6
6
  dependencies = [
7
- "financetoolkit[mcp]",
7
+ "financetoolkit[mcp]==2.1.3",
8
8
  ]
@@ -705,7 +705,6 @@ class ToolRegistry:
705
705
  annotations=ToolAnnotations(
706
706
  title=spec.display_name,
707
707
  readOnlyHint=True,
708
- destructiveHint=False,
709
708
  idempotentHint=True,
710
709
  openWorldHint=True,
711
710
  ),
@@ -97,7 +97,6 @@ class UtilityToolRegistry:
97
97
  """
98
98
  _utility_annotations = ToolAnnotations(
99
99
  readOnlyHint=True,
100
- destructiveHint=False,
101
100
  idempotentHint=True,
102
101
  openWorldHint=False,
103
102
  )