Skip to main content
Glama
haonguyen97ftu

avie-moneylover-mcp

Avie Money Lover MCP / 로컬 브리지

CI License: MIT Node.js 22+

비공식 Money Lover 통합으로, 두 가지 워크플로우를 지원합니다:

  1. MCP 서버 — Money Lover 읽기/쓰기 도구를 MCP 지원 클라이언트에 노출합니다.

  2. GPT + 로컬 브리지 — ChatGPT가 명세서 JSON을 준비/검토하도록 하고, 사용자 본인의 컴퓨터가 Money Lover 토큰/쿠키를 보유한 채 최종 가져오기를 수행합니다.

비공식 프로젝트입니다. 이 저장소는 Money Lover와 제휴, 보증, 후원 관계가 아닙니다. Money Lover 웹 앱에서 관찰된 웹 엔드포인트를 사용합니다. 해당 엔드포인트, 인증 흐름, 카테고리 동작, 안티봇 요구 사항은 예고 없이 변경될 수 있습니다.

제공 기능

  • 인증된 사용자 정보 읽기

  • 지갑 및 지갑 카테고리 목록 조회

  • 날짜 범위별 거래 내역 읽기

  • 거래 내역을 사용하여 Money Lover user_category_v2 소스 ID를 런타임 ID로 변환

  • 쓰기 없이 단일 거래 미리보기

  • 중복 보호 기능이 있는 거래 추가

  • 은행/카드 명세서 배치 미리보기

  • 명세서 합계에 대한 지출 − 수입 대사(조정)

  • 정확한 중복, 가능한 중복, 미해결 카테고리, 검토 행 플래그 지정

  • 명시적 확인 후에만 순차적으로 가져오기

  • 생성된 거래를 다시 읽어 검증

  • 부분 가져오기 후 안전하게 재실행: 정확한 중복은 건너뜀

Related MCP server: Monarch Money MCP Server

요구 사항

  • Windows 10/11, macOS 또는 Linux

  • Node.js 22 이상

  • 사용자가 제어하는 Money Lover 계정

  • 안정적인 쓰기를 위해: 새로운 지갑 소유자 세션, 필요한 경우 최신 브라우저 쿠키/cf_clearance, 일치하는 브라우저 User-Agent

빠른 시작

git clone https://github.com/haonguyen97ftu/avie-moneylover-mcp.git
cd avie-moneylover-mcp
npm install
npm test

Windows 헬퍼 설정

scripts\setup-windows.cmd

현재 셸에서만 자격 증명을 설정합니다:

set "MONEYLOVER_ACCESS_TOKEN=YOUR_FRESH_OWNER_TOKEN"
set "MONEYLOVER_CF_CLEARANCE=YOUR_CURRENT_CF_CLEARANCE_VALUE"
set "MONEYLOVER_USER_AGENT=YOUR_EXACT_BROWSER_USER_AGENT"

그런 다음 실행:

scripts\doctor.cmd

권장 GPT + 로컬 워크플로우

Bank/card statement
        ↓
ChatGPT extracts + categorizes
        ↓
statement JSON
        ↓
local preview
        ↓
review / duplicate / reconciliation checks
        ↓
explicit IMPORT confirmation
        ↓
Money Lover
        ↓
local verification report

Money Lover 토큰, 리프레시 토큰, 비밀번호, 브라우저 쿠키 또는 cf_clearance를 ChatGPT, GitHub 이슈, 로그 또는 스크린샷에 붙여넣지 마십시오. ChatGPT에는 명세서와 생성된 미리보기/결과 JSON만 필요합니다.

명세서 미리보기

scripts\preview.cmd data\your-statement.json

검토 후 가져오기

scripts\import.cmd data\your-statement.json

가져오기 도구는 쓰기가 시작되기 전에 정확히 다음을 입력하도록 요구합니다:

IMPORT

전체 베트남어 가이드는 docs/HUONG_DAN_SU_DUNG.md를 참조하세요.

관찰된 API 동작

인증된 요청은 현재 다음을 사용합니다:

Authorization: AuthJWT <access_token>

관찰된 엔드포인트:

클라이언트 메서드

HTTP

엔드포인트

getUserInfo()

POST

/api/user/info

getWallets()

POST

/api/wallet/list

getCategories(walletId)

POST

/api/category/list

getTransactions(...)

POST

/api/transaction/list

addTransaction(...)

POST

/api/transaction/add

쓰기에는 브라우저 유사 헤더와 최신 Cloudflare 세션이 필요할 수 있습니다. 지원되는 환경 변수는 다음과 같습니다:

  • MONEYLOVER_ACCESS_TOKEN

  • MONEYLOVER_CF_CLEARANCE

  • MONEYLOVER_COOKIE

  • MONEYLOVER_USER_AGENT

  • MONEYLOVER_TIMEOUT_MS

  • MONEYLOVER_CATEGORY_LOOKBACK_DAYS

  • MONEYLOVER_WRITE_DELAY_MS

배치 명세서 형식

data/example-statement.json에서 시작하세요. 전체 필드 문서는 docs/STATEMENT_FORMAT.md에 있습니다.

미리보기:

npm run preview -- data\your-statement.json

가져오기:

npm run import -- data\your-statement.json

선택적 플래그:

  • --allow-review — 검토 후 의도적으로 review 상태로 남겨둔 행 포함

  • --allow-mismatch — 명세서 대사 보호 우회; 차이를 이해한 경우에만 사용

  • --allow-shared-wallet — 소유자 안전 검사 우회; 공유 지갑 쓰기는 여전히 실패할 수 있음

  • --confirm IMPORT — 비대화형 확인; 일반 수동 사용에는 권장되지 않음

안전 기본값

가져오기 도구는 다음 경우에 쓰기를 거부합니다:

  • blocked 행이 있는 경우

  • --allow-review가 제공되지 않았는데 review 행이 존재하는 경우

  • --allow-mismatch가 제공되지 않았는데 명세서 대사 차이가 0이 아닌 경우

  • --allow-shared-wallet이 제공되지 않았는데 인증된 사용자가 지갑 소유자가 아닌 경우

  • 확인 문구가 정확히 IMPORT가 아닌 경우

금액은 양수여야 합니다.

Category v2

일부 계정은 /category/list에서 소스/템플릿 카테고리 ID를 노출하는 반면, /transaction/add는 다른 런타임 카테고리 ID를 기대합니다. 브리지는 기존 거래에서 이 매핑을 학습합니다.

카테고리가 기록에 한 번도 나타나지 않은 경우 다음을 복사하세요:

config/runtime-category-overrides.example.json

대상:

config/runtime-category-overrides.json

그리고 실제 브라우저 거래 요청에서 관찰된 런타임 ID를 추가하세요. 로컬 재정의 파일은 Git에서 무시됩니다.

공개 저장소 안전

이 저장소는 기본적으로 로컬 금융 데이터 커밋을 방지하도록 구성되어 있습니다:

  • data/*.json은 정제된 예제를 제외하고 무시됨

  • out/은 무시됨

  • .env*는 무시됨

  • 로컬 런타임 카테고리 재정의는 무시됨

  • 로컬 세션 헬퍼 파일은 무시됨

푸시 전에 다음을 실행하세요:

npm run repo:check
npm test

그런 다음 git status를 수동으로 검사하세요.

보안

토큰, 비밀번호, 리프레시 토큰, 브라우저 쿠키 또는 cf_clearance 값이 노출된 적이 있다면 손상된 것으로 간주하고 세션을 교체/폐기하세요. SECURITY.md를 참조하세요.

기여

버그 리포트와 풀 리퀘스트를 환영합니다. 변경 사항을 제출하기 전에 CONTRIBUTING.md를 읽어주세요. 이슈나 테스트 픽스처에 실제 금융 명세서, 계정 식별자, 토큰 또는 쿠키를 절대 포함하지 마세요.

문서

라이선스

MIT — LICENSE 참조.

Available Tools

8 tools
add_transactionAdd a Money Lover transactionA

Create one transaction only after explicit confirmation. Validates category ownership and blocks exact duplicates by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesTransaction date, YYYY-MM-DD
noteNoOptional note
withNo
tokenNo
amountYesTransaction amount
walletIdYesWallet identifier
categoryIdNoCategory ID from get_categories
categoryNameNoExact category name; resolved inside the wallet
confirmWriteYesMust be true after the user has explicitly approved the write
allowDuplicateNo
runtimeCategoryIdNoRuntime category ID from a real browser transaction request; overrides automatic mapping

TDQS

A3.7/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. It discloses key behaviors: category ownership validation, duplicate blocking, and the confirmation requirement. It does not mention side effects like balance updates or failure modes, but the disclosed behaviors are significant.

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?

The description is two sentences, with the core action front-loaded and supporting details following. It is concise, avoids redundancy, and is well-structured for quick comprehension.

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?

The description gives enough context to understand the operation's nature but omits information about the return value or what happens on success/failure. Given that there is no output schema and the description does not mention these aspects, it is not fully complete for an agent to anticipate results.

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?

The schema provides descriptions for about 73% of parameters, and the tool description does not add extra meaning to the undocumented ones (e.g., token, with, allowDuplicate). The description relies on the schema, which covers most but not all parameters, so the score is moderate.

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 clearly states the action (create a transaction) and adds context about validation and duplicate blocking. However, it does not explicitly mention the resource (wallet) or differentiate from sibling tools, though the core purpose is evident.

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 specifies that explicit confirmation is required and that duplicates are blocked by default, which provides some usage guidance. However, it does not indicate when to use this tool versus preview_transaction or get_transactions, nor does it mention that this is the write operation.

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

diagnose_write_contextDiagnose Money Lover write contextC

Read-only diagnostics for wallet ownership, browser write config, and category-v2 runtime mapping.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNo
walletIdYes
categoryIdNo
categoryNameNo
runtimeCategoryIdNo

TDQS

C2.7/5.0
Behavior3/5

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

The description states 'Read-only,' which is a clear behavioral disclosure that the tool has no side effects. This is valuable given the absence of annotations. However, it does not mention authentication requirements, error behavior, or what the diagnostic output contains. It provides only a minimal behavioral trait and some scope, but the burden is higher without annotations, so a 3 is appropriate.

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?

The description is a single concise sentence with no fluff. It is front-loaded with 'Read-only' and states the three diagnostic domains compactly. While it could be more informative, the structure is efficient and easy to parse.

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

Completeness1/5

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

This tool has five parameters, no output schema, and no annotations. The description does not explain the purpose of each parameter, what the diagnostic output looks like, or any prerequisites. It is far too sparse to allow an agent to correctly invoke the tool. A comprehensive description would need to cover parameter roles, expected response, and usage context, all of which are missing.

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

Parameters1/5

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

With 0% schema description coverage, the description bears the full responsibility for explaining parameters. It mentions 'wallet ownership,' 'browser write config,' and 'category-v2 runtime mapping,' which could loosely relate to walletId, token, and category fields, but it does not explicitly define any parameter. The token parameter is entirely unaddressed. The description provides no meaningful semantics for the five parameters, so the agent cannot determine what values to supply.

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 clearly states the tool's purpose: 'Read-only diagnostics for wallet ownership, browser write config, and category-v2 runtime mapping.' It names specific resources and the diagnostic nature, which distinguishes it from simple getters like get_wallets or get_categories. It does not explicitly contrast with sibling tools, but the purpose is unambiguous and not a tautology.

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?

The description offers no guidance on when to use this tool versus alternatives. It does not state conditions under which diagnostics are needed, nor does it mention when to avoid using it. While 'diagnostics' implies a troubleshooting use-case, there is no explicit context or exclusion, leaving the agent to guess.

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

get_categoriesList Money Lover categoriesB

Retrieve categories for a specific wallet.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNoOptional access token override
walletIdYesWallet identifier

TDQS

B3.3/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 burden of behavioral disclosure. 'Retrieve' indicates a read operation and the wallet scope is clear, but the description does not disclose response shape, error behavior, authentication requirements, or whether default categories are returned.

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 no filler. Every word earns its place and the key scoping constraint is stated directly.

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?

For a simple list operation with complete schema coverage, the description is minimally sufficient: an agent knows what to call and with what scope. However, the absence of annotations and output schema leaves some gaps around return format and behavior.

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 100%, so the baseline is 3. The description adds only the contextual link 'for a specific wallet' to walletId, while token is already documented in the schema.

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 ('Retrieve') and a clear resource ('categories') for a specific wallet, so the purpose is obvious and distinct from sibling tools like get_wallets or get_transactions. It does not explicitly contrast itself with a sibling, 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?

Usage is implied by the wording: an agent would use this when it needs categories for a wallet. However, there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives.

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

get_transactionsGet Money Lover transactionsB

Fetch transactions for a wallet between two dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNoOptional access token override
endDateYesEnd date, YYYY-MM-DD
walletIdYesWallet identifier
startDateYesStart date, YYYY-MM-DD

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'fetch', which implies read-only, but does not explicitly state side-effect-free behavior, authentication requirements, pagination, or return format. The agent lacks critical context about what happens when this tool is called.

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?

The description is a single, efficient sentence with zero redundancy. It is appropriately front-loaded with the core action and scope, and every word earns its place.

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?

Given the tool has 4 parameters, no output schema, and no annotations, the description is too sparse. It fails to mention return format (e.g., list vs single object), pagination, error handling, or whether the token parameter is ever required. An agent would lack sufficient information to correctly interpret the response.

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 100%, so all parameters are already documented in the schema. The description adds minimal extra meaning ('between two dates' clarifies the date range, 'for a wallet' reinforces walletId), but does not provide new details beyond what the schema already contains.

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?

The description 'Fetch transactions for a wallet between two dates' clearly states the verb (fetch), resource (transactions), and scope (wallet + date range). It distinguishes itself from siblings like get_wallets and get_categories, which target different resources.

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?

No guidance is given on when to use this tool versus alternatives like preview_transaction or add_transaction. The description simply states what it does, leaving the agent to infer when it is appropriate without explicit context or exclusions.

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

get_user_infoGet Money Lover user infoC

Retrieve the authenticated Money Lover profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNoOptional access token override

TDQS

C2.9/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 disclosure burden. It hints that authentication is required ('authenticated profile') but does not state what happens when no valid token exists, how the token override interacts with the default auth context, or what the returned profile contains. For an operation with zero annotation coverage this is a gap.

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 with no fluff. It's efficiently written, though its brevity is partly why behavioral details are missing — the compactness is good, the content is thin.

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?

This is a simple tool — one optional parameter, no output schema, no nested objects — so a minimal description is nearly sufficient. But for a read operation it would benefit from stating the fallback behavior when no token override is supplied and whether unauthenticated calls error out. Adequate but lean.

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 100% on the single token parameter ('Optional access token override'), so the schema already documents it. The tool description adds no parameter-level meaning beyond what the schema conveys, so baseline 3 is appropriate.

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?

Clear verb+resource (retrieve the authenticated profile) that distinguishes it from the data-fetching siblings (get_wallets, get_categories, get_transactions). However, it doesn't explicitly differentiate from login, which also concerns authentication — the boundary between 'fetch the profile' and 'authenticate' is implied rather than stated.

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?

No guidance on when to call this tool or when to prefer it over siblings. Given that the token parameter is described as an 'override,' the description never states that prior authentication (via login) is a prerequisite, nor does it mention any condition under which this should or shouldn't be used.

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

get_walletsList Money Lover walletsB

List all wallets accessible to the authenticated user.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNoOptional access token override

TDQS

B3.2/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 burden of explaining behavior. It says 'List' which implies a read, but it doesn't explicitly state it's non-destructive, doesn't mention response structure, pagination, rate limits, or any side effects. The

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?

One sentence, no fluff, but it's so short it doesn't convey much. For a simple tool it's acceptable, but there's room for additional clarifiers. However, front-loading is good.

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?

The tool is simple, the description covers the core purpose. However, no mention of return format, pagination, or any edge cases. Given no annotations and no output schema, a bit more would help, but the simplicity might justify a 3.

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 covers the single optional token parameter with a description. The tool description adds nothing about the parameter's usage or purpose beyond the schema. Baseline 3 is appropriate.

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?

The description uses a specific verb ('List') and resource ('wallets'), and adds a clear scope ('accessible to the authenticated user'), distinguishing it from other list-style tools that operate on different resources. This leaves no ambiguity about what the tool returns.

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?

No guidance on when to use this tool versus alternatives like get_transactions or get_categories. It doesn't mention any prerequisites (e.g., authentication token), nor does it explain when not to use it. The description is a bare statement with no usage context.

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

loginLogin to Money LoverA

Authenticate with Money Lover and return an access token.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYesMoney Lover account email
passwordYesMoney Lover account password

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the core behavior—authenticating and returning an access token—but omits token lifetime, session effects, or error behavior. This is adequate for a simple login but not rich.

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?

One compact sentence with no filler; the authentication action and return value are front-loaded. Every word earns its place.

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?

The description is sufficient for a simple two-parameter login call, but without annotations or an output schema it leaves the token's subsequent use unspecified and does not describe the response shape. These are meaningful gaps for an agent needing to chain this with sibling tools.

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?

Both parameters are fully described in the schema (100% coverage), so the description adds no parameter-level detail beyond what the schema already provides. The baseline 3 applies.

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 ('Authenticate') and resource ('Money Lover'), and clearly distinguishes itself from the sibling data-operation tools by being the only authentication tool. It also specifies the outcome: returning an access token.

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 description conveys that login is for obtaining an access token, which implies it should precede authenticated calls, but it never explicitly says 'call this before other tools' or mentions alternatives/exclusions. Usage context is therefore 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.

preview_transactionPreview a Money Lover transactionB

Resolve a category and check for an exact duplicate without writing anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
noteNo
tokenNo
amountYes
walletIdYes
categoryIdNo
categoryNameNo
runtimeCategoryIdNoRuntime category ID observed in a browser transaction request; useful for user_category_v2 accounts

TDQS

B3.4/5.0
Behavior4/5

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

With no annotations supplied, the description carries full responsibility for disclosing behavior. It does well by explicitly stating that no write occurs, which is the most important behavioral trait for an AI agent to know. It also indicates that category resolution and duplicate detection are performed, adding meaningful behavioral context beyond argument names.

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?

The description is a single efficient sentence: an action, a result, and a safety constraint, all without redundancy. It front-loads the core behavior and does not waste tokens on restating the name or title.

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?

The tool has 8 parameters, no output schema, no annotations, and minimal schema descriptions, so the description must carry substantial weight. It covers the no-write safety message and category resolution, but omits the expected return value, behavior when a duplicate is found, error handling, authentication via token, and how to choose categoryId versus categoryName. An agent would be under-served when attempting to correctly invoke this tool.

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 only 13%, and the schema contains no descriptions for 7 of 8 parameters. The description's mention of category resolution relates to categoryId/categoryName, but it does not explain amount, date, note, walletId, token, or runtimeCategoryId. The agent must infer their meanings from names and types alone, which is risky.

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 clearly states two concrete behaviors: resolving a category and checking for an exact duplicate, while explicitly noting that nothing is written. It gives the tool an identity beyond its title, though it stops short of explicitly naming how this differs from sibling tools like add_transaction.

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 phrase 'without writing anything' implies this is a read-only/preflight variant of add_transaction, giving some contextual guidance. However, it never explicitly says when to prefer this tool over add_transaction, diagnose_write_context, or get_categories, nor does it mention prerequisites like being logged in.

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. 8 tool updatesv1.0.0
    • First observedadd_transaction
    • First observeddiagnose_write_context
    • First observedget_categories
    • First observedget_transactions
    • First observedget_user_info
    • First observedget_wallets
    • First observedlogin
    • First observedpreview_transaction

TDQS

A3.5/5.0

Scored across 8 tools

Disambiguation5/5

Each tool has a clear, distinct purpose: login, user info, wallets, categories, transactions (list, preview, add), and diagnostics. No two tools overlap in functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (e.g., get_wallets, add_transaction, diagnose_write_context). Although verbs vary, they match the action type appropriately, and the naming is uniform and predictable.

Tool Count5/5

With 8 tools, the server is well-scoped for a personal finance app. It covers authentication, read operations, transaction creation, and diagnostics without bloat or redundancy.

Completeness3/5

The tool set covers authentication, reading of user/wallets/categories/transactions, and adding transactions. However, it lacks update and delete operations for any resource, which are notable gaps in a typical CRUD lifecycle. This could hinder agents from correcting mistakes or modifying data.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides 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.
    1
    MIT
  • A
    license
    C
    quality
    D
    maintenance
    Enables interaction with Monarch Money data via MCP tools for accounts, budgets, and transactions.
    6
    81 npm
    4
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables local analysis of personal finance data from a Monter JSON export, answering questions about spending, subscriptions, debts, and more via MCP-capable assistants without any cloud servers.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables importing AI provider usage CSVs or syncing OpenRouter/OpenAI costs into a local SQLite ledger, then querying spend, budgets, and invoice-style summaries via MCP tools.
    12 npm
    MIT