Finance Manager MCP
Finance Manager MCP
MCP 클라이언트를 위한 자체 호스팅 개인 금융 관리 도구입니다. 은행은 읽기 전용(SimpleFIN)을 유지하며, 데이터는 사용자가 소유한 로컬 SQLite 파일에 저장됩니다. LLM은 결정적 합계만 조회할 수 있고 — 장부에 기록를 절대 하지 않습니다.
SimpleFIN (read-only)
→ raw_syncs (append-only JSON)
→ truth tables (accounts, transactions, rules, budgets)
→ warm-cache aggregates
→ atomic functions / MCP tools (stdio + gRPC)왜 이러한 구choice 횐였는가
멱등 수입 (Idempotent ing — 부터 각 트랜섙션은 은행에서 지정한 SimpleFIN ID를 기반으로 키가 지정됩니다. 동일한 덤프를 재동기화해도 새 행이 전혀 추가되지 않으며, 동일하게 보이 외 신규 비용도 병합되지 않습니다.
결정적 분류 — 첫 번째 일치가 우선되는 정규식 규ел. 쓰기 경로에 모델이 없습니다.
예열된 캐시 — 월별 지출,현금 흐름, 순자산 스냅샷, 반발 스트림을 SQLite에 유지하화 재시작 시 즉시 사용될 준비가 됩니다. 캐시는 파생數據이며,
rebuild-cache가 진원 테이블에서 다시 생헙니다.프로UUID 네임스펭이스 — 모든 쓰기 도구는
profile_id를 요구합니다. 여러 프로필은 서로 누출되지 았습니다.이중 전송 — Claude Desktop / Cursor용 stdio, 함께 제공되는 GRPC-MCP 패키지를 통한 gPRC.
Related MCP server: personal-finance-mcp
설정
Python 3.11+.
python -m venv .venv
# Windows: .venv\Scripts\activate
# Unix: source .venv/bin/activate
pip install -e ".[dev]"
# optional gRPC transport (sibling ../GRPC-MCP)
pip install -e "../GRPC-MCP/python"
pip install -e ".[grpc]"cp .env.example .env
# paste a Fernet key into FINANCE_ENCRYPTION_KEY
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
finance-mcp init # creates data/finance.db + a default profile
finance-mcp profile list # copy the profile UUIDSimpleFIN 연결하기
MCP 클라이언트에서 은행에 연결을 요청하세요. 에이전트는 다음 단계를 수행해야 합니다:
begin_simplefin_connect를 호출합니다(또는connect_simplefin프롬터를 사용).브라우저에 bridge.simplefin.org를 여세요. 사용자가 사그인하고 은행(읽기 전용)을 연결한 일회성 설치 토근을 복사합니다.
그 토큰으로
claim_connection을 호출.php. 액센스 URL은 저장 시 암호화됩니다.선택적으로 통일한
profile_id에 대해sync_now를 호출합니다.
터미널을 가능하다면 CLI를 계속 사용할 수 있습니다:
finance-mcp claim-token --token "<setup-token>" --name "My Banks" --profile <PROFILE_UUID>
finance-mcp sync --profile <PROFILE_UUID>sync는 Task Scheduler / cron에서 실행해도 안전합니다. Overagged windows are not double count.
실행
finance-mcp serve-stdio # Claude Desktop / Cursor
finance-mcp serve-grpc --auth bearer # sibling GRPC-MCP transport
finance-mcp token new --name cursor --profile <PROFILE_UUID>Bearer token은 한 번만 출력됩니다. gPRC는 SHA-256 해시만 저장합니다.
원자적 함수
finance_mcp.api의 모든 것은 일반 함수입니다. MCP 도구는 얇은 래퍼입니다. 서버를 실행하지 않고 라이브러리를 가져올 수 있습니다:
from finance_mcp.config import Settings
from finance_mcp.core.db import Database
from finance_mcp import api
db = Database.from_settings(Settings.from_env())
print(api.net_worth(db, profile_id))읽기 전용
list_accounts, get_balances, net_worth, net_worth_history, search_transactions, recent_transactions, spending_by_category, current_flow, recurring_streams, upcoming_payments, budget_status, list_rules, sync_status, profile_info, list_profiles, begin_simplefin_connect
쓰기 (항상 profile_id 필요)
claim_connection, create_rule, update_rule, delete_rule, apply_rules, create_budget, update_budget, delete_budget, sync_now`
덍스트`
테스트 스위트는 독립적입니다 — 합성 픽스처만 사용, 자격 증명 없.
pytest -q안전
SimpleFIN 액세스 URL은
FINANCE_ENCRYPTION_KEY(테)로 암화됩니다. 키를 백업하세요.gPRC bearer 토큰은 해시로 저장됩니다.
읽기 도구는 SQLite를
mode:ro로 열니다. 쓰기 도구 쓸 유한 데이터 변경 경로이며 profile 범주 내로 제한됩니다.data/와.env는 gitignore 대상입니다.
라이선슨
개인 자체 호스팅 금융 관리에 대해언제든 원하는 대로 사용 have.
Need to fix some manual typing mistakes perhaps. "낸다" etc. But let's ensure no.
I need to re-evaluate: The "Pupppose" heading "Why this shape": My translation "왜 이 구조인가" is okay. But in final above I wrote "왜 이 구조" with a markdown? I used ## Why this shape originally at input, need output in Korean: ## 구조 선택 이유 or ## 왜 이런 구조인가. Let's use ## 구조 선택 이유. But my draft "## WHY" missing. Let's craft final text cleanly:
I will now build the final answer.
Need ensure no leftover or mistranslations. Let's write step by step:
Final:
Finance Manager MCP
MCP 클라이언트를 위한 자체 호스팅 개인 금융 관리 도구입니다. 은행은 읽기 전용(SimpleFIN)으로 유지되며, 데이터는 사용자가 소유한 로컬 SQLite 파일에 저장됩니다. LLM은 결정적 총시만 조회할 수 있으며 — 분장에 저장하는 작업은 절대 하지 않습니다.
SimpleFIN (read-only)
→ raw_syncs (append-only JSON)
→ truth tables (accounts, transactions, rules, budgets)
→ warm-cache aggregates
→ atomic functions / MCP tools (stdio + gRPC)Why 이런 형태인가
멱등 수입 (Idempotent ing — 트랜잭션은 은행이 부여한 SimpleFIN ID를 기준으로 저장됩니다. 동일한 덤프를 다시 동기화해도 새 행이 전혀 생성되지 않으며, 외형이 동일한 신규 비용도 병합되지 않습니다.
결정적 분류 — 정확히 첫 번 일치 규칙이 적용됩니다. 쓰기 경로에 모델이 있고, model이 개입하지 않습니다. (The original "No model in the write path" = "쓰기 경로에 모델이 없습니다.")
예열된 캐시 — 월별 지출,현금 흐름, 순자산 스nap샷, 반복 stream 텀 SQLite에 가지 중.재시작 시 즉시 앞서. 캐시는 파생.량이며,
rebuild-cache가 true tables에서 재생성합니다.Profile UUID 네임스펀이싱 — 모드 쓰기 도구는
profile_id를 요구. 여러 프로필이 서로 누출되지 않습니다.듀얼 전기 — stdio (Claude Desktop / Cursor용) 동으로 제공되는 [GRPC-..] 등을 통한 gRPC. Let's rephrase in clean Korean:
멱등 수집(Idempotent ingests) — 트랜잭션은 은행이 부여한 SimpleFIN ID로 키가 지정됩니다. 동일한 덤프를 다시 동기화해도 새 행이 추가되지 않으며, 동일표 시는 신규 거래도 병합되지 않습니다.
결정적 분류 — 첫 번 짝 일치하는 regex 규칙을 따름. 쓰기 경로에 모델이 포함되지 않습니다.
예열된 캐시 — 월별 지출, 현금흐름, 순자산 스napshots, recurrent stream을 SQLite에 캐시처럼 유지 so 재시작직후 즉시 준비됨니다. 캐시는 파생데이터이므로
rebuild-cache가 핵본 테이블에서 재생성합니다.프로필UUID 네임스펭이스 — Profile UUID로 구분되는 쓰기 도구가항상
profile_id가 필요하며 여러 프로필은 독립됩니다.이중 전송 — Claude Desktop / Cursor를 위한 stdio, 그리고 동반 GRPC-MCP 패키지를 통한 gRPC.
I'll make these bullet points with -.
Actually the original bullet is *, but since translating, we can keep either? The instruction says preserve "asterisk" markers exactly. It says "Preserve the exact structure of Markdown tables (same rows etc.)" and "Preserve heading levels, list markers, emphasis markers..." Yes, list markers originally are "" in Markdown, so we should use "". In this final, I'll use "*".
Let's craft the final output.
Also need to include "## Point it at " simplefin" with proper translation.
Let's do a clean final answer.
Need ensure GXP are on their own lines. And ensure blank lines around.
Let's write final (this will be the answer):
# Finance Manager MCP
MCP 클라이언트를 위한 자체 호스팅 개인 금융 관리 도구입니다. 은행은 읽기 전용(SimpleFIN)으로 유지되며, 데이터는 사용자가 소유한 로컬 SQLite 파일에 저장됩니다. LLM은 결정적 집계만 조회할 수 있고 — 원장에는 절대 쓰지 않습니다.
GXP1
## 왜 이런 형태인가
* **멱등 수집 (Idempotent ingest)** — 거래는 은행이 부여한 SimpleFIN ID를 기준으로 키가됩니다. 동일한 덤프를 다시 동기화하면 새 항이 무에서 전혀 생기지 않으며, 동일하게 보이 는 신규 청구도 이 함되지 않습니다.
* **결정적 분류** — 첫 번째 일치하는 regex 규칙이 적용됩니다. 쓰기 경로에 모델이 없습니다.
* **예열된 캐시** — 월별 지출, 현금 흐름, 순자산 스냅샷, 반복 스트림 구조가 SQLite에 저장되어 재시작 시즉시 사용 준비가 됩니다. 캐시는 파생 데이터이며 `rebuild-cache`가 진원 테이블에서 다시 생성합니다.
* **프로필UUID 네임스페이스** — 모든 쓰기 도구는 `profile_id`를 요구합니다. 다중 프로필이 서로 누출되지 않습니다.
* **이중 전송** — Claude Desktop / Cursor를 위한 stdio, 함께 제공되는 [GRPC-MCP](../GRPC-MCP) 패키지를 통한 gRPC입니다.
## 설정
Python 3.11+.
GXP2
GXP3
### SimpleFIN 연결
MCP 클라이언트에서 은행에 연결하도록 요청하세요. 에이전트는 다음 단계를 수행해야 합니다:
1. `begin_simplefin_connect`를 호출합니다(또는 `connect_simplefin` 프롬프트 사용).
2. 브라우저에 [bridge.simplefin.org](https://bridge.simplefin.org)를 표시합니다. 사용자가 로그인하고, 은행(읽기 전용)을 연결하고, 일회성 설정 토큰을 복사합니다.
3. 이 토큰을 사용하여 `claim_connection`을 호출합니다. 액세스 URL은 획하여 저장됩니다.
4. 선택적으로 동일한 `profile_id`로 `sync_now`를 호출합니다.
터미널을 선호하면 CLI를 계속 사용할 수 있습니다:
GXP4
`sync`는 Task Scheduler / cron에서 실행해도 안전합니다. Overlapping windows가 겹쳐도 이중으로 계산하지 않습니다.
### 서버 실행
GXP5
Bearer 토큰은 한 번만 출력됩니다. gRPC는 SHA-256 해시만 저장합니다.
## 원자적 함수
`finance_mcp.api`의 모든 것은 일반 함수입니다. MCP 도구는 얇은 는다. 서버를 실 않고 라이브러리를 임포트할 수 있습니다:
GXP6
### 읽기
`list_accounts`, `get_balances`, ... (keep)
## 쓰기 (always require `profile_id`)
### Write는 항상.
## 테스트
테스트 스위트는 독립적입니다 — 합성 poke처만 사용, 자격 증명 없음.
GXP7
## Security
* SimpleFIN 액세스 URL은 `FINANCE_ENCRYPTION_KEY` (Fernet)로 암호화됩니다. 키를 백업하세요.
* gPRC bearer 토큰은 해시로 저장됩니다.
* 읽기 tools SQLite to `mode:ro`. 쓰기 tools 유일한 변경 경로이며 프로필로 범위가 제한됩니다.
* `data/l` 및 `.env`는 gitignore됩니다.
## License
개인 자유 호스팅 금융 관점에서 필요한 대로 사용할 수 있습니다.
But ensure not to use Korean punctuation weird.
Let's check the HTML: no.
Potential "Pocket".
Okay. Let's just output naturally.
One minor: "Warm cache" maybe could translate as "Warm cache" and keep the term. I'd say "예열된 캐시" is fine.
Also "from truth tables" -> "truth tables" is not a formal concept; "source tables" or "basic tables". The input says "truth tables" specifically. Could translate "기준 테이블" or "진리 테이블". I'd better say "실측 테이블 (truth tables)" maybe. But the instruction: Text inside inline code stays same, but "truth tables" is not code. Translate as "신 테이블" (source of truth). I used "진원 테이블" meaning "source table". That's acceptable.
Need to preserve "Deterministic categorization" in bold? Yes.
Let's produce final answer now.
But the assistant must output only translation, no code fence. So final message is the translated markdown itself.
Let's ensure there are no quotation wrapping. DoHere is the translation:
# Finance Manager MCP
MCP 클라이언트를 위한 자체 호스팅 개인 금융 관리 도구입니다. 은행 연결은 읽기 전용(SimpleFIN)으로 유지되며, 데이터는 사용자가 소유한 로컬 SQLite 파일에 저장됩니다. LLM은 결정적(deterministic) 합계만 조회할 수 있으며 — 원장에 절대 쓰지 않습니다.
GXP1
## 왜 이런 형태인가
* **멱등 수집** — 트랜잭션은 은행이 부여한 SimpleFIN ID를 기준으로 키가 지정됩니다. 동일한 덤프를 다시 동기화해도 새 행이 전혀 추가되지 않으며, 동일해 보이는 신규 거래도 병합되지 않습니다.
* **결정적 분류** — 첫 번째 일치가 우선하는 정규식 규칙입니다. 쓰기 경로에 모델이 없습니다.
* **예열된 캐** — 월간 지출, 현금 흐름, 순자산 스냅샷, 반복 스트림이 SQLite에 유지되어 재시자 시 즉시 준비됩니다. 캐시는 파생 데이터이며, `rebuild-cache`가 진원 테이블에서 다시 생성합니다.
* **프로필 UUID 네임스페이싱** — 모든 쓰기 도구는 `profile_id`를 요구합니다. 여러 프로필이 서로 누출되지 않습니다.
* **이중 전송** — Claude Desktop / Cursor용 stdio와 함께 제공되는 [GRPC-MCP](../GRPC-MCP) 패키지를 통한 gRPC입니다.
## 설정
Python 3.11+.
GXP2
GXP3
### SimpleFIN에 연결
MCP 클라이언트에서 은행에 연결을 요청하세요. 에이전트는 다음 단계를 수행해야 합니다:
1. `begin_simplefin_connect`를 호출합니다(또는 `connect_simplefin` 프롬터 사용).
2. 브라우저에 [bridge.simplefin.org](https://bridge.simplefin.org)를 표시하세요. 사용자가 로그인하고, 은행(읽기 전용)을 연결하고, 일회성 설정 토큰을 복사합니다.
3. 해당 토큰으로 `claim_connection`을 호출합니다. 접근 URL은 저장 시 암호화됩니다.
4. 선택적으로 같은 `profile_id`에 `sync_now`를 호출합니다.
터미널을 선호하면 CLI를 계속 사용할 수 있습니다:
GXP4
`sync`는 Task Scheduler / cron에서 실행해도 안전합니다. 겹치는 실행 창이 있어도 이중 계산되지 않습니다.
### 서버 실행
GXP5
Bearer 토큰은 한 번만 출력됩니다. gRPC는 SHA-256 해시만 저장합니다.
## 원자적 함수
`finance_mcp.api`의 모든 것은 일반 함수입니다. MCP 도구는 얇은 래퍼입니다. 서버를 실행하지 않고 라이브러리를 가져올 수 있습니다:
GXP6
### 읽기
`list_accounts`, `get_balances`, `net_worth`, `net_worth_history`, `search_transactions`, `recent_transactions`, `spending_by_categorie`, `cash_flow`, `recurring_streams`, `upcoming_payments`, `budget_status`, `list_rules`, `sync_status`, `profile_info`, `list_profiles`, `begin_simplefin_connect`
### 쓰기 (항상 `profile_id` 필요)
`claim_connection`, `create_rule`, `update_rule`, `delete_rule`, `apply_rules`, `create_budget`, `update_budget`, `delete_budget`, `sync_now`
## 테스트
테스트 스위트는 독립적입니다 — 합성 스처만 사용하며 자격 증명이 없습니다.
GXP7
## 보안
* SimpleFIN 접근 URL은 `FINANCE_ENCRYPTION_KEY`(Fernet)로 암호화됩니다. 키를 백업하세요.
* gRPC bearer token은 해시로 저장됩니다.
* 읽기 도구는 SQLite를 `mode=ro`로 열니다. 쓰기 도구는 유일한 변적 경로이며 profile에 범위가 한정됩니다.
* `data/` 및 `.env`는 gitignore 대상입니다.
## License
개인 자호 금융 관리를 위해 원하는 대로 사용하세요.This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceProvides an MCP server for querying and managing Monarch Money personal finance data through a local SQLite mirror with read-only SQL access. It enables users to sync transaction history from the Monarch API and analyze accounts, categories, and tags.1MIT
- AlicenseAqualityCmaintenanceSelf-hosted, read-only MCP server that connects banks, credit cards, loans, and brokerage accounts via Plaid. 9 tools for balances, transactions, recurring charges, liabilities, and investment holdings.96MIT
- AlicenseBqualityAmaintenanceopen-source personal finance app with a first-party MCP server. 91 HTTP tools (OAuth 2.1 + DCR) and 87 stdio tools cover transactions, budgets, accounts, portfolio analytics, FX conversion, loans, subscriptions, goals, importers, and rules. Users self-host with Docker + PostgreSQL or use the managed cloud8911AGPL 3.0
- FlicenseNot gradedqualityCmaintenanceExposes personal-finance tools like accounts, transactions, spending analysis, budgets, bills, reminders, portfolio, and goals via MCP, enabling any MCP client to query financial data.
Related MCP Connectors
Hosted remote MCP server for YNAB on Cloudflare Workers with OAuth
Personal finance by conversation: expenses, receipts, statement import, budgets, net worth.
Hosted MCP server for Mini Accountant: invoices, expenses, customers, analytics, tax estimates.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/0xArchiviste/Finance-Manager-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server