Skip to main content
Glama
tapelog-journal

TapeLog MCP

Official

TapeLog MCP: a private AI trade-journal coach

An open-source Model Context Protocol server that lets Claude, ChatGPT, Cursor or any MCP client analyze your own broker exports. It parses DAS Trader Pro and Robinhood CSVs, rebuilds round trips, and reports your stats plus the behavioral patterns where your results were weakest: time of day, sizing after a loss, hold time, symbol and day of week.

  • Local and private: no broker login, no cloud. Fills are stored in ~/.tapelog/fills.json on your machine.

  • Free: MIT licensed.

  • Process, not picks: TapeLog describes what you already did. It never suggests trades.

Disclaimer: TapeLog is an educational, record-keeping tool. It is not investment advice, and TapeLog is not a registered investment adviser or broker-dealer. It does not recommend buying, selling or holding any security, does not give price targets, signals or market predictions, and does not place trades. Past results don't predict future results.

Tools

Tool

What it does

import_fills

Import a DAS Trader Trades-window CSV, a Robinhood account activity CSV, or a generic CSV (date,time,symbol,side,qty,price,fees). Duplicates are skipped.

get_stats

Net P&L, win rate, profit factor, expectancy, average win and loss, payoff ratio, max drawdown, losing streak, hold time, and PDT day-trade count over the last 5 business days

find_leaks

Descriptive breakdowns of your weakest groups, for example "Your 18 trades entered 11:00-12:00 netted -$2,039 (win rate 11%)" or "After a loss your position was 2.1x larger"

compare_periods

Period A vs period B, such as last week vs this week

weekly_habit_report

This week vs your prior weeks: which habits appeared and which faded, with counts (size-up after a loss, losers held longer than winners, overtrading bursts, a time-of-day slump). For example "Size-up after a loss: this showed up 8 times this week vs 0 per week before." Returns JSON plus a rendered markdown report.

list_trades

Your reconstructed round trips

clear_data

Deletes all stored fills (requires confirm=true)

Related MCP server: trademind-unified-mcp

Install

You need Python 3.10+ and uv, or pip.

Claude Desktop: add this to claude_desktop_config.json (Settings, then Developer, then Edit Config):

{
  "mcpServers": {
    "tapelog": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/tapelog-journal/tapelog-mcp", "tapelog-mcp"]
    }
  }
}

Cursor: add the same block under mcpServers in ~/.cursor/mcp.json.

Claude Code: claude mcp add tapelog -- uvx --from git+https://github.com/tapelog-journal/tapelog-mcp tapelog-mcp

Other MCP clients (Windsurf, VS Code, Cline, Goose): use a stdio server with command uvx and the args shown above. Or run pip install git+https://github.com/tapelog-journal/tapelog-mcp and use the command tapelog-mcp.

Optional: set the env var TAPELOG_DATA=/path/to/fills.json to change where fills are stored.

Use it

"Import ~/Downloads/trades.csv with trade_date 2026-10-15, then show my stats and find my leaks."

"Compare Sept 1-15 to Sept 16-30."

"Give me my weekly habit report."

See a sample weekly habit report (synthetic sample data), also on the TapeLog site.

Exporting your trades: in DAS Trader, open the Trades window, right-click and choose Export. DAS files have no date, so pass trade_date. In Robinhood, go to Account, then Reports and statements, then Account activity report (CSV). Step-by-step guides are on the TapeLog site.

No MCP? The /coach folder has a ready-to-paste Custom GPT or Claude Project instruction pack and a one-shot prompt that works on an uploaded CSV.

Scope rules (enforced in the server instructions and coach prompts)

TapeLog analyzes only your past behavior and process: timing, sizing, hold times and discipline. Findings are descriptive. Small samples are flagged, and patterns are framed as prompts for reflection, not signals.

Develop

python -m venv .venv && .venv/bin/pip install -e . pytest && .venv/bin/pytest -q

Everything in samples/ is synthetic sample data. More free tools are at tapelog-journal.github.io/tapelog, and there's a weekly newsletter at thetapelog.beehiiv.com.

Not affiliated with DAS Inc., Robinhood Markets, Inc., Anthropic or OpenAI.

Available Tools

6 tools
clear_dataA

Delete all locally stored fills. Requires confirm=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses the destructive scope ('all locally stored fills') and the confirmation guard, but says nothing about irreversibility, whether the operation can be undone, or any auth requirement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, destructive scope front-loaded, no filler. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter destructive tool with no output schema, the description covers what is deleted and the guard condition. The main remaining gap is the irreversibility/recovery behavior, which an agent might reasonably want before calling a delete-all tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the schema only shows `confirm` with a default, so the description meaningfully adds the semantic requirement that confirm must be true to proceed. It doesn't clarify what happens if confirm is false, but there is only one parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (delete) and resource (locally stored fills) with a clear scope qualifier ('all locally stored'). An agent can distinguish it from list_trades or import_fills, though the description never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the precondition 'Requires confirm=true', which is genuine usage guidance, but gives no when-to-use framing (e.g., before re-importing fills) or warning about when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_periodsB

Compare stats between period A and period B (YYYY-MM-DD dates), e.g. last week vs this week.

ParametersJSON Schema
NameRequiredDescriptionDefault
a_endYes
b_endYes
a_startYes
b_startYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and discloses little: it confirms the input date format (YYYY-MM-DD) but says nothing about whether periods are inclusive, whether A is the baseline, how deltas are reported, or what data must exist first. For a 4-parameter analytical tool this is a thin disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the core operation first, the format constraint second, and a concrete example last. Nothing is padded or redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations, so the description is the only source of context, yet it never says what 'stats' are returned, how the two periods are presented, or what happens on empty ranges. For a comparison tool with four required inputs this leaves material gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the properties carry only titles like 'A Start', so the description must compensate. It does add real meaning by mapping the four params to two periods and fixing the date format, but it never clarifies inclusivity of start/end or the direction of the comparison.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (compare) and resource (stats) scoped to two named periods, with an example. It is distinguishable from siblings like get_stats by the two-period comparison framing, but it never names an alternative to contrast against, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'last week vs this week' example implies the intended use case, but there is no explicit statement of when to pick this over get_stats or any prerequisite (e.g. data must already be imported). Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_leaksB

Describe where the user's own past results were weakest: time of day, day of week, hold time, symbol, direction, sizing after a loss, and winners vs losers hold time. Descriptive findings only, never trade advice.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full disclosure burden. It does convey that this is a purely descriptive analysis rather than an advisory or mutating operation, but it omits read-only confirmation, prerequisites (imported trade data), and error/empty-data behavior. Partial disclosure against a zero-annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence, front-loaded with the action verb and scope, followed by the analytical dimensions and the constraint. No filler, no restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description should explain the time-range parameters and the data prerequisite. The analytical coverage is well specified, but what the tool returns and how the start/end window governs the analysis are left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and neither 'start' nor 'end' has a title description, leaving both parameters semantically dark. The description never mentions a date range at all, so it does not compensate for the schema gap — the agent must guess what the two string params mean and whether empty defaults mean 'all data'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Describe') and a precisely scoped resource ('where the user's own past results were weakest'), then enumerates the exact dimensions analyzed (time of day, hold time, sizing after a loss). This is far more specific than siblings like get_stats, although no sibling is named explicitly to force the routing choice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Descriptive findings only, never trade advice' sets a clear behavioral boundary on how results may be used, but the description never says when to pick this over get_stats or compare_periods, nor what data/period is required first. Usage is implied by the enumerated leak categories rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_statsB

Stats for closed round trips (optionally between start/end YYYY-MM-DD): net P&L, win rate, profit factor, expectancy, average win/loss, max drawdown, losing streak, hold time, and PDT day-trade count.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
startNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the behavioral burden. It discloses the computed return values (useful given no output schema) and implies a read-only aggregation, but says nothing about data scope (which account), preconditions such as needing imported fills first, or cost/latency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence; the metric list is long but earns its place since there is no output schema to document the return shape. Slightly dense, but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and an undocumented 2-param schema, the description covers the return metrics well but leaves data-source scope (all trades vs a filtered set) and prerequisites unstated. Adequate but with clear gaps for a stats tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%: start/end have no descriptions and empty-string defaults. The description partially compensates by stating the format (YYYY-MM-DD) and that both are optional, but omits range inclusivity (inclusive/exclusive) and what an empty value means (all time).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource ('Stats for closed round trips') and enumerates the exact metrics computed (net P&L, win rate, profit factor, max drawdown, etc.), so an agent knows precisely what comes back. It does not, however, distinguish itself from siblings like compare_periods or find_leaks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical 'optionally between start/end YYYY-MM-DD' implies the date-range use case, so usage is inferable. There is no explicit guidance on when to prefer this over compare_periods or what happens if the range is omitted, leaving the agent to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_fillsA

Import executions from a DAS Trader Trades-window CSV, a Robinhood account activity CSV, or a generic CSV (date,time,symbol,side,qty,price,fees). Pass csv_text or a local file_path. DAS exports have no date: pass trade_date (YYYY-MM-DD). Stored locally (~/.tapelog/fills.json); duplicates are skipped.

ParametersJSON Schema
NameRequiredDescriptionDefault
brokerNoauto
csv_textNo
file_pathNo
trade_dateNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does meaningful work: it discloses the persistence location (~/.tapelog/fills.json) and that duplicates are skipped, both non-obvious behaviors implying merge-style idempotency rather than overwrite. It omits error behavior on malformed CSVs and what is returned after import.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the supported formats and ending with storage/dedup semantics. Every clause conveys operational information; nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter import with no annotations and no output schema, the description is nearly complete: inputs, format-specific date handling, and storage/dedup behavior are all covered. The one real gap is the undocumented 'broker' parameter and any indication of what a successful import reports back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains csv_text, file_path, and trade_date (including the YYYY-MM-DD format), but the 'broker' parameter is never mentioned despite defaulting to 'auto', leaving a meaningfully undocumented knob for ambiguous inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Import executions') plus the concrete resources it accepts: DAS Trader Trades-window CSV, Robinhood activity CSV, or generic CSV with an explicit column list. This clearly separates it from the read/analysis siblings (get_stats, find_leaks, list_trades) and the destructive clear_data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent which input channel to use (csv_text vs file_path) and gives a conditional rule for when trade_date is required ('DAS exports have no date: pass trade_date'). No explicit when-not-to-use guidance, but the format routing is unusually concrete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tradesC

List reconstructed round trips (most recent first).

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
limitNo
startNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses the sort order but says nothing about whether the result is paginated, how start/end constrain the window, defaults, or whether it is a pure read — significant gaps for a listing tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence, front-loaded with the verb and resource, with no filler. It is appropriately tight, though its brevity edges toward under-specification rather than efficient concision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With three undocumented parameters, no output schema, and no annotations, the description leaves the agent guessing what a 'round trip' contains and how the window parameters behave. It is not complete enough for a filtered list tool of this shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%: 'start', 'end', and 'limit' have no documentation anywhere, and the description never mentions them. The ordering hint weakly implies a limit/recent-window concept, but the date-range semantics of start/end are entirely absent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('List reconstructed round trips') and adds a useful ordering detail ('most recent first'). It is clearly distinct from get_stats, find_leaks, and compare_periods, though it never explicitly contrasts itself with those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus the alternatives (e.g., find_leaks for anomalies, get_stats for aggregates). The only guidance is implicit in the word 'trades' and the ordering note, which is not enough to route an agent reliably.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.1.0
    • First observedclear_data
    • First observedcompare_periods
    • First observedfind_leaks
    • First observedget_stats
    • First observedimport_fills
    • First observedlist_trades

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation4/5

get_stats, find_leaks, and compare_periods all operate on performance analytics, so an agent might briefly hesitate between them, but each has a clearly stated distinct purpose (general stats vs. descriptive weakness analysis vs. period-vs-period comparison). list_trades, import_fills, and clear_data are unambiguously separate.

Naming Consistency5/5

Every tool follows a consistent snake_case verb_noun pattern (get_stats, find_leaks, compare_periods, list_trades, clear_data, import_fills). The convention is uniform throughout with no stylistic deviations.

Tool Count5/5

Six tools is well-scoped for a local trade-journaling/analytics server. Each tool covers a distinct operation (import, list, analyze, compare, find weaknesses, reset) and none feels redundant or filler.

Completeness4/5

The import -> list -> analyze lifecycle is well covered, including a data-reset operation. Minor gaps exist: no way to edit or delete a single misparsed fill, and no export of reconstructed trades, but these are workable around via clear_data plus re-import.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides AI-powered trading analytics and coaching by analyzing historical trades to identify strategies, emotional patterns, and behavioral mistakes via MCP tools.
    1
    MIT
  • F
    license
    B
    quality
    B
    maintenance
    Enables unified access to portfolio management, market data, risk analysis, trade records, compliance checks, and Slack notifications through a single MCP server.
    18
    -
  • A
    license
    C
    quality
    A
    maintenance
    Local paper-trading and market simulation MCP server for multi-account portfolios, advanced orders, options/futures, backtesting, alerts, and automation.
    60
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides market intelligence tools for crypto, Korean market, US equities, options, and backtests, as well as personal trading journal access, through MCP.
    78 PyPI
    MIT