MCP server · Audited from source
Finance Toolkit MCP server
by jerbouma/financetoolkitMIT licenceAudited 21 Sep 2026 · source ffd971075709
Is it safe? No — BLOCK, grade F (55/100). The tool list is built at runtime, so we cannot read it from the source. The audit recorded 30 findings (0 critical, 4 high, 7 medium, 14 low). Maintainer's description: Transparent and Efficient Financial Analysis
Cite
Cite this page
ModelsAtlas. “Finance Toolkit MCP server (jerbouma/financetoolkit)”. Retrieved 21 Sep 2026. https://modelsatlas.com/mcp/jerbouma/finance-toolkit
Why this is BLOCK. The audit found 0 critical and 4 high findings; the most severe is Code injection at financetoolkit/cache/serialization_model.py:50. Each finding is listed below with its file and line.
Why this page is still public. People search for this server by name. Hiding it would leave them with the README's word alone; here they see what the code does. We list it so you can decide, and we do not show connect commands for BLOCK servers.
Trust audit
Audit 0.4.1 · full source read 21 Sep 2026
30 findings, listed below with the file and line each was found on. Grade A needs a sandboxed behavioural run too; this audit read the source only.
What the source does
- FilesystemDeclared1 observation
- NetworkDeclared4 observations
- ShellDeclared4 observations
- DependenciesPinnedNothing floats
- SecretsFoundSee the findings
Findings (30)
Sorted by severity · the 25 most severe of 30 are listed
HIGHCode injectioncode.deserialize · financetoolkit/cache/serialization_model.py:50
return pickle.loads(zlib.decompress(payload)) # noqa: S301
- Why
- deserialises untrusted bytes into live objects
- Fix
- use json or yaml.safe_load
HIGHCode injectioncode.deserialize · financetoolkit/cache/serialization_model.py:78
return pickle.loads(zlib.decompress(payload)) # noqa: S301
- Why
- deserialises untrusted bytes into live objects
- Fix
- use json or yaml.safe_load
HIGHCode injectioncode.eval_exec · financetoolkit/ratios/ratios_controller.py:495
calculation = eval(formula_adjusted) # noqa
- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
HIGHNetwork egressnet.tls_off · financetoolkit/utilities/requests_model.py:59
url, headers=headers, timeout=timeout, verify=False # noqa
- Why
- certificate verification is disabled
- Fix
- leave verification on
MEDIUMInventory / provenanceinv.binary · financetoolkit/portfolio/example_datasets/example_portfolio.xlsx
example_portfolio.xlsx
- Why
- a compiled or binary member cannot be reviewed from source
- Fix
- ship source, or explain the binary in the README
MEDIUMCode injectioncode.dynamic_import · financetoolkit/mcp_server/registry_controller.py:386
module = importlib.import_module(module_path)
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.generic · README.md:118
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.generic · financetoolkit/discovery/discovery_controller.py:56
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.generic · financetoolkit/discovery/discovery_controller.py:124
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.generic · financetoolkit/discovery/discovery_controller.py:229
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.generic · financetoolkit/discovery/discovery_controller.py:292
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWInventory / provenanceinv.binary · tests/datasets/balance_dataset.pickle
balance_dataset.pickle
- Why
- a compiled or binary member cannot be reviewed from source
- Fix
- ship source, or explain the binary in the README
LOWInventory / provenanceinv.binary · tests/datasets/cash_dataset.pickle
cash_dataset.pickle
- Why
- a compiled or binary member cannot be reviewed from source
- Fix
- ship source, or explain the binary in the README
LOWInventory / provenanceinv.binary · tests/datasets/historical_dataset.pickle
historical_dataset.pickle
- Why
- a compiled or binary member cannot be reviewed from source
- Fix
- ship source, or explain the binary in the README
LOWInventory / provenanceinv.binary · tests/datasets/income_dataset.pickle
income_dataset.pickle
- Why
- a compiled or binary member cannot be reviewed from source
- Fix
- ship source, or explain the binary in the README
LOWFilesystem / pathfs.traversal · financetoolkit/mcp_server/mcpb/build-mcpb.sh:18
REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)"
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · tests/mcp_server/test_mcp_oauth.py:104
client = TestClient(app, base_url="http://127.0.0.1:8000")
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · tests/mcp_server/test_mcp_oauth.py:236
client = TestClient(app, base_url="http://127.0.0.1:8000")
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · tests/mcp_server/test_mcp_oauth.py:291
client = TestClient(app, base_url="http://127.0.0.1:8000")
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · tests/mcp_server/test_mcp_oauth.py:334
client = TestClient(app, base_url="http://127.0.0.1:8000")
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWObfuscation / stealthobf.base64_blob · README.md:9
[ + HWP/PDF 첨부 마크다운화 | 83 Korean DART disclosure APIs → 15 MCP tools with Buffett-grade analyst frames
quantconnect/mcp-server
Official Python MCP server for local interactions with the QuantConnect API
UltralayerHQ/ultralayer-plugin
Realtime market intelligence: news, events, guidance, filing diffs, stakeholders, sentiment, alerts & more.
Audit history
- ✕BLOCK F 55 / 100
Source changed, verdict held ·
ffd971075709
README badge
Badges show the current verdict, BLOCK included
A badge cannot be hidden by the maintainer while the verdict is BLOCK. Fix the findings, push, and the re-audit updates it.
Questions about Finance Toolkit MCP server
What is the Finance Toolkit MCP server?
Is Finance Toolkit safe to connect to an agent?
What credentials does Finance Toolkit need?
How does Finance Toolkit run?
How current is this page?
I already installed Finance Toolkit. What should I do?
Can the verdict change?
Sources
- jerbouma/financetoolkit on GitHub — the source we read, its licence, stars and activityObserved · 21 Sep 2026
- ModelsAtlas trust audit — BLOCK verdict for commit ffd971075709Observed · 21 Sep 2026
Spotted something wrong? Report a correction · Methodology
Keep going in your AI
Opens with this page as the source. We add nothing else to the prompt.
- What is the Finance Toolkit MCP server?
- Is Finance Toolkit safe to connect to an agent?
- What credentials does Finance Toolkit need?