Loading...
Loading...
MCP server for accessing Monarch Money personal finance data through Claude Desktop and Claude Code
npx skill4agent add aradotso/mcp-skills monarch-money-mcp-serverSkill by ara.so — MCP Skills collection
git clone https://github.com/robcerda/monarch-mcp-server.git
cd monarch-mcp-server
# Using pip
pip install -r requirements.txt
pip install -e .
# OR using uv
uv sync~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"Monarch Money": {
"command": "/opt/homebrew/bin/uv",
"args": [
"run",
"--with",
"mcp[cli]",
"--with-editable",
"/absolute/path/to/monarch-mcp-server",
"mcp",
"run",
"/absolute/path/to/monarch-mcp-server/src/monarch_mcp_server/server.py"
]
}
}
}{
"mcpServers": {
"Monarch Money": {
"command": "python",
"args": ["/absolute/path/to/monarch-mcp-server/src/monarch_mcp_server/server.py"]
}
}
}~/.claude.json%USERPROFILE%\.claude.json{
"mcpServers": {
"Monarch Money": {
"command": "/opt/homebrew/bin/uv",
"args": [
"run",
"--with",
"mcp[cli]",
"--with-editable",
"/absolute/path/to/monarch-mcp-server",
"mcp",
"run",
"/absolute/path/to/monarch-mcp-server/src/monarch_mcp_server/server.py"
]
}
}
}.mcp.json{
"Monarch Money": {
"command": "/opt/homebrew/bin/uv",
"args": [
"run",
"--with",
"mcp[cli]",
"--with-editable",
"/absolute/path/to/monarch-mcp-server",
"mcp",
"run",
"/absolute/path/to/monarch-mcp-server/src/monarch_mcp_server/server.py"
]
}
}cd /absolute/path/to/monarch-mcp-server
# Using python
python login_setup.py
# OR using uv
uv run python login_setup.pymonarch_login_with_tokenget_accounts# Returns all accounts with: id, displayName, currentBalance, accountType, institution
get_accounts()Show me all my financial accountsget_account_holdingsget_account_holdings(account_id="acc_123456")What holdings do I have in my investment account acc_123456?refresh_accountsrefresh_accounts()Refresh all my account balances from the banksget_transactions# Basic usage - last 50 transactions
get_transactions(limit=50)
# Filtered by date range
get_transactions(
start_date="2024-01-01",
end_date="2024-01-31",
limit=100
)
# Filter by account and category
get_transactions(
account_id="acc_123",
category_ids=["cat_456", "cat_789"],
limit=50,
offset=0
)
# Search transactions
get_transactions(
search="Amazon",
wide_search=True,
limit=25
)
# Filter by flags
get_transactions(
has_notes=False,
is_split=False,
limit=100
)Show me my last 100 transactions
Get all Amazon transactions from January 2024
Show me uncategorized transactions with no notescreate_transactioncreate_transaction(
account_id="acc_123",
amount=-45.99,
description="Coffee shop",
date="2024-01-15",
category_id="cat_dining",
merchant_name="Local Cafe"
)Create a transaction for $45.99 at Local Cafe on January 15th in my checking accountupdate_transactionupdate_transaction(
transaction_id="txn_789",
amount=-52.00,
description="Grocery store shopping",
category_id="cat_groceries",
date="2024-01-16"
)Update transaction txn_789 to $52 and change the category to groceriesget_budgets# Current month budgets
get_budgets()
# Specific date range
get_budgets(
start_date="2024-01-01",
end_date="2024-12-31"
)Show me my budgets for 2024set_budget_amount# Set budget for a category
set_budget_amount(
amount=500.00,
category_id="cat_dining",
start_date="2024-02-01",
apply_to_future=True
)
# Set budget for a category group
set_budget_amount(
amount=2000.00,
category_group_id="grp_housing",
start_date="2024-02-01",
apply_to_future=False
)Set my dining budget to $500 per month starting in Februaryget_categoriesget_categories()
# Returns: id, name, group, icon, systemCategory, isSystemCategory, isDisabledList all my transaction categoriesget_category_groupsget_category_groups()Show me all category groupsset_transaction_categoryset_transaction_category(
transaction_id="txn_123",
category_id="cat_groceries",
mark_reviewed=True
)Categorize transaction txn_123 as groceries and mark it reviewedbulk_categorize_transactionsbulk_categorize_transactions(
transaction_ids=["txn_1", "txn_2", "txn_3"],
category_id="cat_dining"
)Categorize all these Amazon transactions as shopping: txn_1, txn_2, txn_3get_transactions_needing_review# All transactions needing review
get_transactions_needing_review(needs_review=True)
# Uncategorized transactions only
get_transactions_needing_review(uncategorized=True)
# Transactions without notes
get_transactions_needing_review(no_notes=True)
# Last N days
get_transactions_needing_review(
needs_review=True,
days=30
)Show me all uncategorized transactions from the last 30 daysupdate_transaction_notesupdate_transaction_notes(
transaction_id="txn_456",
notes="Receipt: https://example.com/receipt.pdf"
)Add a note to transaction txn_456 with the receipt linkmark_transaction_reviewedmark_transaction_reviewed(transaction_id="txn_789")Mark transaction txn_789 as reviewedget_tagsget_tags()Show me all my transaction tagsset_transaction_tagsset_transaction_tags(
transaction_id="txn_123",
tag_ids=["tag_business", "tag_reimbursable"]
)Tag transaction txn_123 as business and reimbursablecreate_tagcreate_tag(
name="Travel",
color="#FF5733"
)Create a new tag called Travel with color redsearch_transactionssearch_transactions(
search="Starbucks",
category_ids=["cat_dining"],
account_ids=["acc_checking"],
tag_ids=["tag_business"],
start_date="2024-01-01",
end_date="2024-01-31",
min_amount=5.00,
max_amount=50.00
)Find all Starbucks transactions tagged as business between $5 and $50 in Januaryget_transaction_detailsget_transaction_details(transaction_id="txn_456")Get full details for transaction txn_456delete_transactiondelete_transaction(transaction_id="txn_789")Delete transaction txn_789get_recurring_transactionsget_recurring_transactions()Show me all my recurring transactionsget_transaction_rulesget_transaction_rules()Show me all my transaction rulescreate_transaction_rulecreate_transaction_rule(
merchant_criteria_operator="contains",
merchant_criteria_value="Spotify",
set_category_id="cat_subscriptions",
add_tag_ids=["tag_recurring"]
)
# Rule with amount criteria
create_transaction_rule(
merchant_criteria_operator="contains",
merchant_criteria_value="Gas",
set_category_id="cat_transportation",
amount_operator="greater_than",
amount_value=20.00
)Create a rule to categorize all Spotify transactions as subscriptionsupdate_transaction_ruleupdate_transaction_rule(
rule_id="rule_123",
merchant_criteria_operator="equals",
merchant_criteria_value="Netflix",
set_category_id="cat_entertainment"
)Update rule rule_123 to use exact match for Netflixdelete_transaction_ruledelete_transaction_rule(rule_id="rule_456")Delete transaction rule rule_456get_transaction_splitsget_transaction_splits(transaction_id="txn_789")Show me the splits for transaction txn_789split_transactionsplit_transaction(
transaction_id="txn_123",
splits=[
{
"amount": -30.00,
"category_id": "cat_groceries",
"merchant_name": "Target - Groceries"
},
{
"amount": -20.00,
"category_id": "cat_household",
"merchant_name": "Target - Household"
}
]
)Split transaction txn_123: $30 for groceries and $20 for household itemsget_cashflowget_cashflow(
start_date="2024-01-01",
end_date="2024-12-31"
)Show me my cashflow for 2024get_net_worth# All accounts
get_net_worth(
start_date="2023-01-01",
end_date="2024-12-31"
)
# Specific account type
get_net_worth(
start_date="2024-01-01",
end_date="2024-12-31",
account_type="investment"
)Show me my net worth trend for 2024get_account_balance_historyget_account_balance_history(account_id="acc_checking_123")Show me the balance history for my checking accountget_net_worth_by_account_typeget_net_worth_by_account_type(
start_date="2024-01-01",
timeframe="monthly"
)Break down my net worth by account type for 2024get_transactions_summaryget_transactions_summary()Give me a summary of my transactionsget_spending_summaryget_spending_summary(
start_date="2024-01-01",
end_date="2024-01-31",
limit=10
)Show me my top 10 spending categories for January# 1. Get current month budgets
budgets = get_budgets()
# 2. Check spending summary
summary = get_spending_summary(
start_date="2024-01-01",
end_date="2024-01-31",
limit=20
)
# 3. Review over-budget categories
# Identify categories where spent > budgeted
# 4. Adjust next month's budgets
set_budget_amount(
amount=600.00,
category_id="cat_groceries",
start_date="2024-02-01",
apply_to_future=True
)# 1. Find transactions needing review
needs_review = get_transactions_needing_review(
uncategorized=True,
days=30
)
# 2. Categorize similar transactions in bulk
bulk_categorize_transactions(
transaction_ids=["txn_1", "txn_2", "txn_3"],
category_id="cat_groceries"
)
# 3. Add notes where needed
update_transaction_notes(
transaction_id="txn_4",
notes="Reimbursable expense"
)
# 4. Mark reviewed
mark_transaction_reviewed(transaction_id="txn_4")# 1. Review common merchants
transactions = search_transactions(
search="Spotify",
limit=10
)
# 2. Create rule for automatic categorization
create_transaction_rule(
merchant_criteria_operator="contains",
merchant_criteria_value="Spotify",
set_category_id="cat_subscriptions",
add_tag_ids=["tag_recurring", "tag_entertainment"]
)
# 3. Verify rule is working
rules = get_transaction_rules()# 1. Get all investment accounts
accounts = get_accounts()
investment_accounts = [a for a in accounts if a['accountType'] == 'investment']
# 2. Check holdings for each
for acc in investment_accounts:
holdings = get_account_holdings(account_id=acc['id'])
# 3. Review balance history
history = get_account_balance_history(account_id=acc['id'])
# 4. Check overall net worth trend
net_worth = get_net_worth(
start_date="2023-01-01",
end_date="2024-12-31",
account_type="investment"
)# 1. Create project-specific tags
create_tag(name="Project Alpha", color="#3498db")
create_tag(name="Reimbursable", color="#e74c3c")
# 2. Tag relevant transactions
set_transaction_tags(
transaction_id="txn_123",
tag_ids=["tag_project_alpha", "tag_reimbursable"]
)
# 3. Search for all project expenses
project_expenses = search_transactions(
tag_ids=["tag_project_alpha"],
start_date="2024-01-01",
end_date="2024-12-31"
)
# 4. Calculate total reimbursable amount
reimbursable = search_transactions(
tag_ids=["tag_reimbursable"],
start_date="2024-01-01",
end_date="2024-01-31"
)check_auth_status()Check if I'm authenticated with Monarch Moneysetup_authentication()How do I set up authentication for Monarch Money?python login_setup.py~/.monarch/session.pickle# Force a refresh from financial institutions
refresh_accounts()
# Wait a few minutes, then check again
get_transactions(limit=50)~/Library/Application Support/Claude/claude_desktop_config.json~# Use pagination for large datasets
get_transactions(limit=100, offset=0)
get_transactions(limit=100, offset=100)
# Filter by date range
get_transactions(
start_date="2024-01-01",
end_date="2024-01-31",
limit=500
)
# Use search with specific criteria
search_transactions(
search="Amazon",
start_date="2024-01-01",
end_date="2024-01-31"
)# Ensure split amounts sum exactly to transaction amount
# Original transaction: -$100
split_transaction(
transaction_id="txn_123",
splits=[
{"amount": -60.00, "category_id": "cat_1"},
{"amount": -40.00, "category_id": "cat_2"}
]
)
# Sum: -$100 ✓# Ensure apply_to_future is set correctly
set_budget_amount(
amount=500.00,
category_id="cat_dining",
start_date="2024-02-01",
apply_to_future=True # Apply to current and future months
)~/.monarch/session.pickle%USERPROFILE%\.monarch\session.pickle