Stores structured metadata from parsed investment statements in a SQLite database, enabling programmatic queries for holdings, transactions, account balances, and other financial data.
Investment Statement MCP Server
Parse and query investment statements from multiple institutions using natural language.
Features
Multi-Institution Support: Currently supports Questrade (Interactive Brokers and Scotia coming soon)
Hybrid Storage: SQLite for structured queries + LanceDB for semantic search
Natural Language Queries: Ask questions like "What were my dividends in Q3?" or "Show my SPY holdings"
Structured Tools: Programmatic access via MCP tools
Archive Management: Keeps original PDFs and parsed JSON for reference
Installation
Configuration
The server is configured via .mcp.json. Key environment variables:
LANCEDB_PATH: Vector database location (default:./data/lancedb)SQLITE_PATH: SQLite database location (default:./data/statements.db)PDF_ARCHIVE_PATH: Original PDF storage (default:./data/pdfs)JSON_ARCHIVE_PATH: Parsed JSON storage (default:./data/json)MODEL_NAME: Embedding model (default:all-MiniLM-L6-v2)
Usage
Starting the Server
Indexing Statements
Querying Data
Natural Language Search:
Structured Queries:
Resources
statements://catalog- List all indexed statementsstatements://{statement_id}- Get specific statementstatements://{statement_id}/summary- Account summarystatements://{statement_id}/holdings- Holdings/positionsstatements://{statement_id}/transactions- Transaction history
Supported Statements
Questrade
✅ Account Summary (balances, FX rates, TFSA info)
✅ Holdings/Positions (securities with cost basis, P&L)
✅ Transactions (trades, dividends, deposits, withdrawals)
Interactive Brokers (Coming Soon)
⏳ Planned
Scotia (Coming Soon)
⏳ Planned
Development
Architecture
FastMCP 2.0: MCP server framework
pymupdf4llm: PDF parsing optimized for LLMs
LanceDB: Vector database for semantic search
SQLite: Structured metadata storage
sentence-transformers: Embedding generation
License
MIT
This server cannot be installed