Atlas / MCP servers / jerbouma / FinanceToolkit

FinanceToolkitBLOCK

mcp/jerbouma/financetoolkit

Transparent and Efficient Financial Analysis

Verdict
BLOCK
Grade
F
Trust score
46 /100
Exposed tools
—
Transport
stdio · streamable-http
License
MIT
Stars
5,460
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://github.com/JerBouma/FinanceToolkit)

[](https://github.com/sponsors/JerBouma) [](https://www.buymeacoffee.com/jerbouma) [](https://www.linkedin.com/in/boumajeroen/) [](https://www.jeroenbouma.com/projects/financetoolkit/mcp) [](https://github.com/JerBouma/FinanceToolkit/releases/latest/download/financetoolkit.mcpb) [![Smithery](https://img.shields.io/badge/Smithery-grey?logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTM1IiBoZWlnaHQ9IjE1OSIgdmlld0JveD0iMCAwIDEzNSAxNTkiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTMxLjM1MDggNTguNDA1M0gwVjc4Ljk0OTJDMCA5MC44ODcyIDkuNjc1NzggMTAwLjU2MyAyMS42MTM4IDEwMC41NjNINDIuMTU3N1Y2OS4yMTIyQzQyLjE1NzcgNjMuMjQzMiAzNy4zMTk4IDU4LjQwNTMgMzEuMzUwOCA1OC40MDUzWiIgZmlsbD0id2hpdGUiLz48cGF0aCBkPSJNNDYuMjMyNyA2OS4yMTIyVjEwMC41NjNINzcuNTgzNUM4My41NTI1IDEwMC41NjMgODguMzkwNCA5NS43MjUxIDg4LjM5MDQgODkuNzU2MVY1OC40MDUzSDU3LjAzOTZDNTEuMDcwNiA1OC40MDUzIDQ2LjIzMjcgNjMuMjQzMiA0Ni4yMzI3IDY5LjIxMjJaIiBmaWxsPSJ3aGl0ZSIvPjxwYXRoIGQ9Ik0xMTMuMDEzIDU4LjQwNTNIOTIuNDY5NVY4OS43NTYxQzkyLjQ2OTUgOTUuNzI1MSA5Ny4zMDc0IDEwMC41NjMgMTAzLjI3NiAxMDAuNTYzSDEzNC42MjdWODAuMDE5MUMxMzQuNjI3IDY4LjA4MTEgMTI0Ljk1MSA1OC40MDUzIDExMy4wMTMgNTguNDA1M1oiIGZpbGw9IndoaXRlIi8+PHBhdGggZD0iTTAuMDAwMjQ0MTQxIDM3LjU1MzVWNTQuMzUxSDMxLjM1MTFDMzcuMzIwMSA1NC4zNTEgNDIuMTU4IDQ5LjUxMzEgNDIuMTU4IDQzLjU0NDFWNi4wMTUzNEM0MC45MzMyIDUuOTc1NzIgMzkuNjYxNiA1Ljk1NDEgMzguMzMyMyA1Ljk

Read from source at commit a79cdd363706OBSERVED · 2026-10-25
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (pypi)
claude mcp add financetoolkit --env FINANCIAL_MODELING_PREP_API_KEY=${FINANCIAL_MODELING_PREP_API_KEY} --env FRED_API_KEY=${FRED_API_KEY} -- None financetoolkit==2.2.3
03

Trust audit

BLOCKgrade F · trust 46/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (1 observation(s))
Network
declared (6 observation(s))
Shell
declared (5 observation(s))
Dependencies
pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
financetoolkit/cache/serialization_model.py:50
return pickle.loads(zlib.decompress(payload))  # noqa: S301
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.deserialize · CWE-78, CWE-94, CWE-95
financetoolkit/cache/serialization_model.py:78
return pickle.loads(zlib.decompress(payload))  # noqa: S301
Why it matters. deserialises untrusted bytes into live objects
Fix. use json or yaml.safe_load
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
financetoolkit/ratios/ratios_controller.py:700
calculation = eval(formula_adjusted)  # noqa
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
financetoolkit/utilities/requests_model.py:159
url, headers=headers, timeout=timeout, verify=False  # noqa
Why it matters. certificate verification is disabled
Fix. leave verification on
MEDIUMInventory / provenance · inv.binary · CWE-1104
financetoolkit/portfolio/example_datasets/example_portfolio.xlsx
example_portfolio.xlsx
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
financetoolkit/__init__.py:56
module = importlib.import_module(_CLASSES[name])
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
financetoolkit/mcp_server/registry_controller.py:855
module = importlib.import_module(module_path)
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
financetoolkit/fixedincome/fixedincome_controller.py:1934
- Key Rate Duration = -(Dirty Price(Key Rate + Δy) - Dirty Price(Key Rate - Δy)) / (2 * Dirty Price * Δy)
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
financetoolkit/fixedincome/fixedincome_controller.py:1939
and Δy is the shock applied to the key rate only (1 basis point by default).
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
financetoolkit/fixedincome/fixedincome_controller.py:2069
- %ΔPrice ≈ -Modified Duration * Δy + 0.5 * Convexity * Δy^2
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
financetoolkit/fixedincome/fixedincome_controller.py:2072
annual by default), Δy is the yield change (0.01 by default) and %ΔPrice is the change of the full
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
financetoolkit/fixedincome/fixedincome_controller.py:4872
λ = s / (1 - R),  P(default within t years) = 1 - e^(-λt)
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
README.md:98
companies = Toolkit(["AAPL", "MSFT"], api_key="FINANCIAL_MODELING_PREP_KEY", start_date="2017-12-31")
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
README.md:118
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
README.md:398
funds = Toolkit(["VOO", "QQQ", "RSP"], api_key="FINANCIAL_MODELING_PREP_KEY")
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
README.md:482
"Permanent Portfolio", start_date="2016-01-01", api_key="FINANCIAL_MODELING_PREP_KEY"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
financetoolkit/discovery/discovery_controller.py:106
discovery = Discovery(api_key="FINANCIAL_MODELING_PREP_KEY")
LOWInventory / provenance · inv.binary · CWE-1104
tests/datasets/balance_dataset.pickle
balance_dataset.pickle
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
tests/datasets/cash_dataset.pickle
cash_dataset.pickle
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
tests/datasets/historical_dataset.pickle
historical_dataset.pickle
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
tests/datasets/income_dataset.pickle
income_dataset.pickle
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.hidden_file · CWE-1104
.pre-commit-config.yaml
.pre-commit-config.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
financetoolkit/mcp_server/mcpb/.mcpbignore
.mcpbignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.system_paths · CWE-22, CWE-59
tests/utilities/test_requests_model.py:63
return_value=MagicMock(cafile="/etc/ssl/cert.pem"),
LOWFilesystem / path · fs.system_paths · CWE-22, CWE-59
tests/utilities/test_requests_model.py:89
return_value=MagicMock(cafile="/etc/ssl/cert.pem"),

Gates applied: no_behavioural_pass.

Audited 2026-10-25 · audit v0.4.1 · source sha a79cdd363706full audit observations/trust-audit/mcp-server/jerbouma__financetoolkit.json · Report an issue / request a re-scan
04

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-25a79cdd363706BLOCKF46first audit
05

Questions

What is the FinanceToolkit MCP server?

Transparent and Efficient Financial Analysis

Is FinanceToolkit safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (46/100) and found 4 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does FinanceToolkit need?

It reads FINANCIAL_MODELING_PREP_API_KEY, FRED_API_KEY and FT_MCP_SECRET_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does FinanceToolkit run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on PyPI as financetoolkit.

How current is this page?

The grade is for one exact copy of the source (a79cdd363706), read on 2026-10-25. The repository is watched and re-audited when it changes.

Add this badge to your README

Shows this page's audit result and links back to it. It updates when the audit does.

ModelsAtlas audit badge

Markdown
[![ModelsAtlas audit: FinanceToolkit](https://modelsatlas.com/mcp/jerbouma/financetoolkit/badge.svg)](https://modelsatlas.com/mcp/jerbouma/financetoolkit/)

Not your listing, or something out of date? Claim or update your listing.

Advertisement