Atlas / MCP servers / ma4nn / pp-terminal

pp-terminalSAFE

mcp/ma4nn/pp-terminal

The Analytic Companion for Portfolio Performance

Verdict
SAFE
Grade
B
Trust score
89 /100
Exposed tools
9 8r · 1w · 0d
Transport
stdio
License
GPL-3.0
Stars
25
01

Overview

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

[](https://dev-investor.de/chat)

A powerful command-line interface (CLI) that allows programmatic access to Portfolio Performance data to offer a whole new level of insights into your assets.

pp-terminal is a lightweight tool for all the nice-to-have features that won't make it into the official Portfolio Performance app. This can be because of country-specific tax rules, complex Java implementation, highly individual requirements, too many edge-cases, etc.

Use Cases

You can run the single commands individually or pp-terminal can act as an MCP server to give AI models like Claude Opus, Gemini or Qwen access to your (anonymized) portfolio to help you answer questions like:

  • "Give me an overview of my portfolio"
  • "What do you think about my portfolio allocation? Am I overweight anywhere?"
  • "Do I have enough cash to cover the upcoming Vorabpauschale taxes?"
  • "I need 1k EUR after tax. Which securities should I sell to minimize taxes?"

Thís application supports specific tax concepts like FIFO, Sparer-Pauschbetrag, Grundfreibetrag), Günstigerprüfung and Teilfreistellungen).

[!IMPORTANT] I am not a tax consultant. All results of this application are just a non-binding indication and without guarantee. They may deviate from the actual values.

For example, pp-terminal includes a CLI command to calculate the Vorabpauschale (preliminary taxes) for Germany: ![Vorabpausch

Read from source at commit f134342113ebOBSERVED · 2026-10-10
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.

claude-code
claude mcp add pp-terminal -- uvx pp-terminal
claude-desktop
{
  "mcpServers": {
    "pp-terminal": {
      "command": "uvx",
      "args": [
        "pp-terminal"
      ]
    }
  }
}
03

Exposed tools (9)

8 read · 1 write · 0 destructive.

ToolRiskDescription
query_accountsreadList all accounts with balances and validation warnings.
query_cash_flowsreadCalculate cumulative deposits, withdrawals, and net contributions.
query_fifo_lotsreadList all FIFO purchase lots with projected tax on hypothetical sale.
query_securitiesreadList all securities with current holdings and key metrics.
simulate_sell_allreadSimulate selling all shares and return a per-security summary with totals.
simulate_sell_shareswriteSimulate selling shares of a specific security using FIFO order.
simulate_sell_target_grossreadFind the shares to sell to realize a target gross proceeds amount, drawing the least-taxed lots first.
simulate_sell_target_netreadFind the shares to sell to achieve a target net proceeds amount with minimal taxes.
simulate_vapreadCalculate German preliminary lump-sum tax (Vorabpauschale/VAP) per security for a given year (section 18 InvStG).
04

Trust audit

SAFEgrade B · trust 89/100 Nothing in the source contradicts what it says it does. Grade A is reserved for packages that have also passed the behavioural sandbox.

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

What the source does

Filesystem
none-observed
Network
none-observed
Shell
none-observed
Dependencies
pinned
Secrets in source
none-found

Findings (5)

LOWInventory / provenance · inv.hidden_file · CWE-1104
.gitmodules
.gitmodules
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/data/test_xml_id_reference_converter.py:135
root = convert('<client><portfolio><transactions><entry><parent reference="../../.."/></entry></transactions></portfolio></client>')
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/data/test_xml_id_reference_converter.py:153
'../../../..',                # beyond the root element
INFOInventory / provenance · inv.oversize · CWE-1104
tests/fixtures/kommer.ids.xml
tests/fixtures/kommer.ids.xml
Why it matters. 1761305 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
tests/fixtures/kommer.xml
tests/fixtures/kommer.xml
Why it matters. 1772145 bytes not read

Gates applied: no_behavioural_pass.

Audited 2026-10-10 · audit v0.4.1 · source sha f134342113ebfull audit observations/trust-audit/mcp-server/ma4nn__pp-terminal.json · Report an issue / request a re-scan
05

Audit history

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

DateSourceVerdictGradeScoreChange
2026-10-10f134342113ebSAFEB89first audit
06

Questions

What is the pp-terminal MCP server?

The Analytic Companion for Portfolio Performance

What tools does pp-terminal expose?

9 in total: 8 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is pp-terminal safe to connect to an agent?

The audit found nothing in the source that contradicts what it says it does, and graded it B (89/100). Grade A is held back for packages that have also passed a sandboxed behavioural run, which is why a clean server reads B.

What credentials does pp-terminal need?

No credential environment variables were found in its source, so it appears to need none.

How does pp-terminal run?

It speaks stdio, so it runs as a local process your client starts. It is published on PyPI as pp-terminal.

How current is this page?

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

Advertisement