프로토타입 · 미리 보기: 공식 레지스트리의 모든 서버를 담고 있으며 30분마다 동기화해요. 리뷰와 계정 기능은 다음 단계에서 열려요.
PopNx MCPAI를 쓰는 사람을 위한 MCP 서버 · 쉬운 말로 설명해요

GnuCash

제작자: tillawy버전 0.1.1i★ –i내 컴퓨터에서 실행
레지스트리 이름io.github.tillawy/gnucash-mcp

설치

개요

제작자가 쓴 설명(영어 원문)

Read a GnuCash book and import bank statements into it.

PopNx MCP의 세 기둥

이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.

할 수 있는 일

이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.

  • 연결 방식: 내 컴퓨터에서 실행
  • 전송 방식: stdio
  • 카테고리: 기타
  • 입력해야 할 값: GNUCASH_MCP_CONFIG

설치

쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.

설치하기 전에

  • 기본 점검: 1개 중 1개 통과
  • 내 컴퓨터에서 내 사용자 계정의 권한(파일, 네트워크, 앱)으로 실행돼요.
  • 직접 입력할 값: GNUCASH_MCP_CONFIG

필요한 것

  • PyPIPython의 uv 설치(uvx 명령어용)

어떤 앱을 쓰세요?

위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.

Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요

{
  "mcpServers": {
    "gnucash": {
      "command": "uvx",
      "args": [
        "gnucash-mcp"
      ],
      "env": {
        "GNUCASH_MCP_CONFIG": "your-value"
      }
    }
  }
}

터미널에서 이 명령어를 실행하세요

claude mcp add gnucash --env GNUCASH_MCP_CONFIG=your-value -- uvx gnucash-mcp

실행하기 전에 빈 값을 채워 주세요.

Cursor에서 열기

또는 설정을 직접 복사하기

프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요

{
  "mcpServers": {
    "gnucash": {
      "command": "uvx",
      "args": [
        "gnucash-mcp"
      ],
      "env": {
        "GNUCASH_MCP_CONFIG": "your-value"
      }
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

VS Code에서 열기

또는 설정을 직접 복사하기

프로젝트의 .vscode/mcp.json에 붙여 넣으세요

{
  "servers": {
    "gnucash": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "gnucash-mcp"
      ],
      "env": {
        "GNUCASH_MCP_CONFIG": "your-value"
      }
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.

선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.

직접 입력할 값

  • GNUCASH_MCP_CONFIG 필수 env
    Absolute path to the TOML file that configures your GnuCash book.

이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.

할 수 있는 일

내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.

기본 점검i

누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 8일 점검

  • ✓ 통과

    제작자와 저장소 일치

    레지스트리 이름이 GitHub 계정 tillawy 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요

  • … 아직 점검 안 함

    계속 관리되고 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • … 아직 점검 안 함

    라이선스 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • – 해당 없음

    엔드포인트 응답

    내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요

  • – 해당 없음

    OAuth로 로그인

    내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요

  • … 아직 점검 안 함

    도구 설명에 숨겨진 지시 없음

    내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요

기타 카테고리의 다른 서버와 비교i

  • 이 카테고리의 다른 서버 18513개 중 0%보다 스타가 많아요
  • 이 카테고리의 다른 서버 18513개 중 59%보다 최근에 레지스트리에 공개됐어요
  • 기본 점검 결과가 이 카테고리의 다른 서버 18513개 중 100%와 같거나 더 좋아요

레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.

자주 묻는 질문

GnuCash, 안전한가요?

해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.

어떤 키나 코드가 필요한가요?

입력해야 할 값: GNUCASH_MCP_CONFIG

내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?

내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).

아직 관리되고 있나요?

GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.1.1)은 32일 전 레지스트리에 올라왔어요.

어떤 앱에서 쓸 수 있나요?

Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Python (uv)도 있어야 해요.

대신 쓸 수 있는 건 뭐가 있나요?

같은 카테고리에는: Spec Driven Development, Remote Desktop Commander, Cape Winelands Visit Planner

대안

같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.

카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i

Spec Driven Development

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

제작자: formulahendry초기↓ 66/주★ 44014개월 전 업데이트

내 컴퓨터에서 실행

Remote Desktop Commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

제작자: desktop-commander성장 중★ 2113일 전 업데이트

클라우드에서 실행✓ desktopcommander.app

Cape Winelands Visit Planner

Cape Winelands wine farm finder and day-route planner

제작자: aiagenttools.co.za초기오늘 업데이트

클라우드에서 실행✓ aiagenttools.co.za

제작자의 README

README 열기

제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.

gnucash-mcp

An MCP server that lets Claude read your GnuCash book and import bank statements into it. Upload a statement CSV from any bank, and Claude works out its layout, proposes a category for each row, and shows a preview. It flags duplicates before writing anything.

It has two parts:

  • gnucash_storage: a piecash wrapper, configured per book, with read helpers and idempotent writes.
  • gnucash_mcp: the MCP server that exposes the tools and prompts over stdio.

Requirements: a SQLite book

GnuCash saves books as XML by default, usually gzip-compressed. piecash, which this project is built on, can't read XML. It only reads GnuCash's SQL formats, and this server opens SQLite files. To convert your book:

  1. Open it in GnuCash.
  2. Choose File > Save As.
  3. Set Data Format to sqlite3, pick a file name, and save.
  4. Point book_path in your book TOML at the new file.

Keep using the SQLite file in GnuCash from then on. The XML file won't see the imported transactions. If book_path points at an XML book, every tool fails with a message explaining this conversion.

You also need uv and Python 3.13 or newer. uv installs Python for you if needed.

Configure a book

Create a TOML file for your book, for example ~/gnucash/personal.toml:

book_path = "personal.gnucash"   # relative to this TOML file, or an absolute path

bank_account = "Assets:Current Assets:Checking Account" # default bank side for imports open_if_lock = false # open for writing even while GnuCash has the file open do_backup = true # piecash writes a timestamped backup before writing

Optional: "posting" (booking date) or "transaction" (when the purchase happened).

date_source = "posting"

Optional hints about your bank's statement format, added to the import prompts.

statement_notes = ''' Details holds the merchant and a card reference "REF <12 digits>" (use it as external_id). The card date inside Details is YY/MM/DD. '''

Only book_path is required.

statement_notes is the place for your bank's quirks: where a reference ID hides, which of two date columns to use, or what an odd column means. Claude reads the notes during the column-mapping step, but still shows you the mapping to confirm. That way the server stays bank-agnostic, and each user's bank knowledge lives in their own config.

date_source picks which date becomes the transaction date when a statement has two: the bank's posting (booking) date, or the transaction date when you actually paid. Card purchases often post a day or two later, and the card date is often only inside the description. If date_source is unset, Claude asks during import whenever a statement has both. Setting it is recommended. For rows without a reference ID, the date is part of duplicate detection, so switching between the two dates across imports could let the same row in twice.

Install

The server runs with uvx, so there's nothing to install globally. Point GNUCASH_MCP_CONFIG at your book TOML, using an absolute path.

Claude Code:

claude mcp add gnucash -e GNUCASH_MCP_CONFIG=/absolute/path/to/personal.toml -- uvx gnucash-mcp

Claude Desktop: add this to claude_desktop_config.json (on macOS it's in ~/Library/Application Support/Claude/) and restart Claude Desktop:

{

"mcpServers": { "gnucash": { "command": "uvx", "args": ["gnucash-mcp"], "env": {"GNUCASH_MCP_CONFIG": "/absolute/path/to/personal.toml"} } } }

If Claude Desktop can't find uvx, replace "uvx" with its full path (which uvx).

Tools and prompts

Tools:

  • list_accounts
  • get_account(fullname)
  • list_transactions(fullname, start_date, end_date, limit)
  • create_account(fullname, account_type, currency=None, description="", placeholder=False): the parent must exist; the currency defaults to the parent's
  • find_transactions(search, limit=5): find transactions in any account whose description, notes or number contain the word, newest first.
  • copy_transaction(guid, post_date, external_id=None, notes=None): add a copy of an existing transaction with all its splits (also more than two); only the date, number and notes are new. Used by the clone options for entries add_transaction can't write.
  • add_transaction(post_date, description, counter_account, amount, account=None, external_id=None, notes=None, force=False, quantity=None)
  • update_transaction(guid, post_date=None, description=None, external_id=None, notes=None, counter_account=None, amount=None, account=None, quantity=None): change an existing transaction; fields left out stay as they are, and an empty external_id or notes clears it. Get the guid from list_transactions. Changing amount, quantity or counter_account needs a two-split transaction and moves both splits, so it stays balanced; account (default: the config's bank_account) says which side amount refers to. When only amount changes on a transaction with a commodity counter account, the units stay and the price changes. To change the amount of a copy, call this on the guid copy_transaction returns.
  • delete_transaction(guid): permanently delete a transaction and its splits, and return what was deleted.
  • reconcile_transactions(guids | start_date/end_date, state="y", account, dry_run=True): set the reconcile state (y reconciled, c cleared, n not reconciled) of an account's splits, chosen by GUID or by post date range (inclusive). Only the split on account changes. The dry run reports how many splits would change and their date range. The write is saved in one go and does not need GnuCash's reconcile window.
  • import_transactions(rows, dry_run=True): batch import. Each row gets a status of new, added or duplicate, and duplicates include the existing transactions they match.

If account is omitted, it defaults to the config's bank_account. Read tools and dry runs open the book read-only. Writes open it for writing. A batch import opens it once, so it creates one backup file.

Prompt:

  • import_bank_statement: imports a bank CSV with a preview table and one batch write (in Claude Code, run /mcp__gnucash__import_bank_statement).
  • review_bank_statement: imports a bank CSV one row at a time, waiting for your decision on each row (in Claude Code, run /mcp__gnucash__review_bank_statement).
  • clone_transaction: asks you for a search word, finds the newest similar entry, and adds a new one with the same accounts and description after you confirm the date and amount (in Claude Code, run /mcp__gnucash__clone_transaction).
Buying a commodity (gold, stocks)

When the counter account holds a non-currency commodity, such as gold coins or shares, pass quantity: the units bought or sold, as a positive number. amount stays the value on the bank account in the bank's currency, and the price per unit is amount / quantity. The transaction keeps the bank account's currency; the bank split gets -amount and the counter split gets the value -amount and the quantity quantity (negative when amount is positive, a sale):

add_transaction(

post_date=date(2026, 9, 29), description="Buy 5 from Anis", counter_account="Assets:Gold English Coins 21 carat", # commodity XGL21-8 amount=Decimal("-3330"), # JOD out of the bank quantity=Decimal("5"), # 666 JOD per coin account="Assets:Bank Accounts:ArabBank Jordan", # commodity JOD )

quantity is required for such a counter account and rejected for one in the bank account's currency. It must be positive and no finer than the commodity's fraction. import_transactions rows take the same quantity field. Converting between two currencies is still not supported.

Importing a bank statement

  1. Upload the CSV and run the import_bank_statement prompt.
  2. Claude works out the CSV layout from its header and first rows, for any bank: the delimiter, the date column and format, the description column, and the amounts. It handles both one signed amount column and separate money-out and money-in columns, and either decimal separator (1,234.56 or 1.234,56). It shows you the mapping with one parsed row, and waits for you to confirm before parsing everything. Money out becomes a negative amount and money in a positive one. Each row gets a short, readable description (e.g. Zalatimo Sweets), and the bank's original text is kept verbatim in the transaction's notes. Claude checks whether the file lists the newest row first, and if so reads it from the bottom up, so rows are written oldest first in the bank's own order (same-day rows are not re-sorted). If you'd rather keep the bank text as the description, say so when confirming the mapping. Then Claude picks a category account for each row.
  3. Claude calls import_transactions(rows, dry_run=True) and shows a preview with each row marked new or duplicate.
  4. After you confirm, Claude calls import_transactions(rows, dry_run=False). The new rows are written in one go, and duplicates are left out.
  5. For each duplicate, Claude asks whether to force it or skip it. Forcing calls add_transaction(..., force=True). This covers, for example, a genuine second identical purchase on the same day.

Each transaction is recorded in the bank account's own currency, so a EUR account in a USD book gets EUR transactions. The category account must use the same currency, because currency conversion isn't supported. If the category you want is missing, Claude offers to create it with create_account and does so once you confirm.

Nothing is written if any row has an unknown account, mixes currencies, or has an amount with more decimals than the bank account's currency allows.

Reviewing row by row

Run review_bank_statement instead. After the same currency, parsing and category steps, Claude shows one row at a time (Row i/N) with its Num (the bank reference stored as the transaction number), proposed category and whether it is new or a duplicate. For each row you choose one of:

  • Accept: write the row now, with import_transactions([row], dry_run=False).
  • Change: edit the category, description or amount, then review the row again.
  • Skip: write nothing.
  • Force: for duplicates only; write it anyway with add_transaction(..., force=True).
  • Accept all remaining: write the remaining new rows in one batch. Duplicates are still reviewed one at a time.
  • Stop: end the review and get a summary.

Rows you approve are written immediately. If you stop halfway, they stay in the book, and a re-run shows them as duplicates. Each approval is a separate write, so with do_backup = true every approved row creates a backup file. Set do_backup = false in the book TOML if you don't want that.

Idempotent writes

from decimal import Decimal

from datetime import date from pathlib import Path from gnucash_storage import ( NewTransaction, add_transaction, load_config, open_configured_book, )

config = load_config(Path("books/development-book.toml")) with open_configured_book(config, readonly=False) as book: added = add_transaction( book, NewTransaction( post_date=date(2025, 11, 28), description="TEST BISTRO REST.", account="Assets:Current Assets:Savings Account", counter_account="Expenses:Dining", amount=Decimal("-36.00"), # money out of the bank account ), force=False, # set force=True to bypass duplicate checking )

A row can carry an optional external_id: a unique reference from the bank, such as a card retrieval reference number (REF 606006000101), an OFX FITID,

앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요

PopNx에게 묻기