Skip to main content
Glama

Copilot Money MCP 서버

로컬 Copilot Money 데이터를 사용하여 AI로 개인 재정을 조회하고 관리하세요

License: MIT Node.js 18+ TypeScript Tests codecov copilot-money-mcp MCP server

면책 조항

이 프로젝트는 독립적인 커뮤니티 주도 프로젝트이며, Copilot Money 또는 그 모회사와 어떠한 방식으로도 제휴, 보증 또는 관련되어 있지 않습니다. 이 도구는 로컬에 캐시된 데이터에 대해 AI 기반 쿼리를 수행할 수 있도록 독립 개발자가 만들었습니다. "Copilot Money"는 해당 소유자의 상표입니다.

Related MCP server: LunchMoney MCP Server

개요

AI 어시스턴트가 사용자의 Copilot Money 개인 재정 데이터에 액세스할 수 있도록 하는 MCP 서버입니다. Mac의 로컬에 캐시된 Firestore 데이터베이스(LevelDB + Protocol Buffers)에서 데이터를 읽습니다. 읽기 작업은 100% 로컬에서 수행되며 네트워크 요청이 전혀 없습니다.

지출, 투자, 예산, 목표 등을 아우르는 17개의 읽기 도구를 통해 거래 내역, 계좌, 보유 자산, 잔액, 카테고리, 정기 결제, 예산, 목표 및 투자 성과를 조회할 수 있습니다.

개인정보 보호 우선

당사는 사용자의 데이터를 수집, 저장하거나 이 프로젝트에서 운영하는 서버로 전송하지 않습니다. 애초에 그런 서버가 없습니다. 자세한 내용은 개인정보 처리방침을 참조하십시오.

  • 어떠한 종류의 분석, 텔레메트리 또는 추적도 없음

  • 읽기 작업은 완전히 로컬에서 수행됨 — 네트워크 요청 제로

  • 오픈 소스 — 코드를 직접 검증 가능

[!IMPORTANT] AI 제공업체 관련 주의사항. 이 서버 자체는 로컬에서 실행되며 이 프로젝트가 운영하는 서버로 데이터를 전송하지 않지만, 연결된 AI 어시스턴트(Claude, ChatGPT, Gemini 등)는 질문에 답변하는 과정에서 사용자의 Copilot Money 데이터를 보게 됩니다. 즉, 사용자의 금융 데이터가 선택한 모델의 제공업체(Anthropic, OpenAI, Google 또는 기타 제3자)로 전송 및 처리되며, 이는 해당 제공업체의 개인정보 처리방침 및 데이터 보존 약관을 따릅니다.

이 MCP 서버를 호스팅된 AI 모델과 함께 사용하면, 사용자는 자신의 금융 데이터를 해당 AI 제공업체와 공유하는 것에 동의하는 것입니다. 이러한 트레이드오프를 감수할 수 있는 경우에만 이 도구를 사용하십시오. 그렇지 않다면 공식 Copilot Money 통합을 기다리거나 완전히 로컬에서 실행되는 모델을 사용하는 것을 고려하십시오.

빠른 시작

사전 요구 사항

  • Node.js 18+ (Claude Desktop에 포함됨)

  • Copilot Money (macOS App Store 버전)

  • Claude Desktop, Cursor 또는 기타 MCP 호환 클라이언트

Claude Desktop을 통한 설치

  1. Releases에서 최신 .mcpb 번들을 다운로드합니다.

  2. .mcpb 파일을 더블 클릭하여 Claude Desktop에 설치합니다.

  3. Claude Desktop을 재시작합니다.

  4. 재정에 관해 질문을 시작하세요!

npm을 통한 설치

npm install -g copilot-money-mcp

그런 다음 Claude Desktop 설정(~/Library/Application Support/Claude/claude_desktop_config.json)에 추가합니다:

{
  "mcpServers": {
    "copilot-money": {
      "command": "copilot-money-mcp"
    }
  }
}

Cursor를 위한 설치

  1. 패키지를 전역으로 설치합니다:

npm install -g copilot-money-mcp
  1. Cursor 설정(Cmd + ,) > Features > MCP Servers를 엽니다.

  2. 서버 설정을 추가합니다:

{
  "mcpServers": {
    "copilot-money": {
      "command": "copilot-money-mcp"
    }
  }
}

수행 가능한 작업

지출 분석

"지난달 외식에 얼마를 썼지?"

"지난 30일 동안의 모든 Amazon 구매 내역을 보여줘"

"올해 나의 상위 5개 지출 카테고리는 무엇이지?"

get_transactions, get_categories를 날짜 범위, 텍스트 검색 및 카테고리 필터와 함께 사용합니다.

계좌 개요

"모든 계좌를 합친 나의 순자산은 얼마지?"

"지난 6개월 동안의 당좌 예금 잔액을 월별로 보여줘"

"주의가 필요한 은행 연결은 무엇이지?"

get_accounts, get_balance_history, get_connection_status를 사용합니다.

투자 포트폴리오

"현재 나의 보유 자산과 총 수익률은 얼마지?"

"지난 1년간의 AAPL 가격 변동 내역을 보여줘"

"이번 분기 나의 시간 가중 수익률(TWR)은 얼마지?"

get_holdings, get_investment_prices, get_securities, get_investment_performance, get_twr_returns를 사용합니다.

예산 및 목표

"이번 달 예산 계획대로 잘 지키고 있나?"

"비상금 목표는 얼마나 달성했지?"

"지난 6개월간의 목표 달성 내역을 보여줘"

get_budgets, get_goals, get_goal_history를 사용합니다.

구독 및 정기 결제

"내가 결제 중인 구독 서비스는 무엇이지?"

"매달 정기 결제에 얼마를 쓰고 있지?"

get_recurring_transactions를 사용합니다.

사용 가능한 도구

읽기 도구 (17)

도구

설명

get_transactions

날짜 범위, 카테고리, 가맹점, 금액, 계좌, 위치, 텍스트 검색 및 특수 유형(해외, 환불, 중복, HSA 적격) 필터를 사용하여 거래 내역을 조회합니다.

get_accounts

잔액이 포함된 모든 계좌를 나열하고 유형(당좌, 저축, 신용, 투자)별로 필터링합니다. 순자산 계산을 포함합니다.

get_categories

거래 건수와 지출 합계가 포함된 카테고리를 나열합니다. 목록, 트리 및 검색 보기를 지원합니다.

get_recurring_transactions

빈도, 비용 및 다음 예상 결제일이 포함된 구독 및 정기 결제 내역을 식별합니다.

get_budgets

지출 대비 한도 비교가 포함된 예산을 가져옵니다.

get_goals

목표 금액, 진행 상황 및 월별 기여금이 포함된 재무 목표를 가져옵니다.

get_goal_history

일일 데이터 및 기여 기록이 포함된 목표의 월별 진행 상황 스냅샷입니다.

get_balance_history

시간에 따른 계좌의 일일 잔액 스냅샷입니다. 일, 주 또는 월 단위 세분화를 지원합니다.

get_holdings

티커, 수량, 가격, 취득 원가 및 총 수익률이 포함된 현재 투자 보유 자산입니다.

get_investment_prices

주식, ETF, 뮤추얼 펀드 및 암호화폐에 대한 과거 가격 데이터(일일 + 고빈도)입니다.

get_investment_splits

비율, 날짜 및 승수가 포함된 주식 분할 내역입니다.

get_investment_performance

증권별 투자 성과 데이터입니다.

get_twr_returns

투자 보유 자산에 대한 시간 가중 수익률(TWR) 월별 데이터입니다.

get_securities

증권 마스터 데이터 — 티커, 이름, 유형, 가격 및 식별자(ISIN/CUSIP).

get_connection_status

마지막 동기화 타임스탬프 및 오류를 포함하여 연결된 기관의 은행 동기화 상태입니다.

get_cache_info

로컬 캐시 메타데이터 — 날짜 범위, 거래 건수, 캐시 경과 시간.

refresh_database

디스크에서 데이터를 다시 로드합니다. 캐시는 5분마다 자동 새로고침됩니다.

설정

캐시 TTL

서버는 데이터를 메모리에 5분 동안 캐시합니다. 환경 변수를 통해 설정할 수 있습니다:

# Set cache TTL to 10 minutes
COPILOT_CACHE_TTL_MINUTES=10 copilot-money-mcp

# Disable caching (always reload from disk)
COPILOT_CACHE_TTL_MINUTES=0 copilot-money-mcp

refresh_database 도구를 사용하여 수동으로 새로고침할 수도 있습니다.

디코드 타임아웃

대규모 데이터베이스(500MB 이상)의 경우 디코드 타임아웃을 늘리십시오(기본값: 90초):

# Via environment variable
DECODE_TIMEOUT_MS=600000 copilot-money-mcp

# Via CLI flag
copilot-money-mcp --timeout 600000

1GB가 넘는 데이터베이스의 경우 Node.js 메모리도 늘리십시오:

{
  "mcpServers": {
    "copilot-money": {
      "command": "node",
      "args": [
        "--max-old-space-size=4096",
        "/path/to/copilot-money-mcp/dist/cli.js",
        "--timeout", "600000"
      ]
    }
  }
}

지원되는 날짜 기간

period 매개변수는 다음 단축키를 지원합니다:

this_month last_month last_7_days last_30_days last_90_days ytd this_year last_year

알려진 제한 사항

로컬 캐시 의존성

이 서버는 클라우드가 아닌 Copilot Money의 로컬 Firestore 캐시에서 읽습니다. Firestore의 오프라인 지속성은 앱이 가져온 모든 문서를 캐시하므로, 로컬 데이터베이스에는 일반적으로 앱에서 본 모든 거래, 계좌, 예산, 목표 및 기타 데이터가 포함되어 있습니다. 기본 Firestore 캐시 크기는 100MB(수만 건의 거래를 처리하기에 충분함)이며, 이전 문서는 해당 제한을 초과하는 경우에만 LRU 가비지 컬렉션을 통해 제거됩니다.

캐시된 데이터를 최대화하려면: Copilot Money 앱을 열고 데이터(거래 내역, 계좌, 예산)를 탐색하여 로컬에 가져오고 캐시되었는지 확인하십시오.

문제 해결

데이터베이스를 찾을 수 없음

"Database not available" 메시지가 표시되는 경우:

  1. Copilot Money가 설치되어 있고 데이터가 동기화되었는지 확인하십시오.

  2. 데이터베이스 위치를 확인하십시오: ~/Library/Containers/com.copilot.production/Data/Library/Application Support/firestore/__FIRAPP_DEFAULT/copilot-production-22904/main

  3. 디렉토리에 .ldb 파일이 있는지 확인하십시오.

  4. 사용자 지정 경로를 제공하십시오: copilot-money-mcp --db-path /path/to/database

디코드 워커 시간 초과

"Decode worker timed out" 메시지가 표시되는 경우:

  1. 타임아웃을 늘리십시오: copilot-money-mcp --timeout 300000 (5분)

  2. 1GB 이상의 데이터베이스의 경우 Node.js 메모리도 늘리십시오: node --max-old-space-size=4096 dist/cli.js --timeout 300000

거래 내역을 찾을 수 없음

  • Copilot Money 앱을 열고 동기화가 완료될 때까지 기다리십시오.

  • 데이터베이스 구조가 변경되었을 수 있습니다 — 이슈를 제기하십시오.

기여

개발 설정, 아키텍처 및 새 도구 추가 방법에 대해서는 CONTRIBUTING.md를 참조하십시오.

라이선스

MIT 라이선스 - 자세한 내용은 LICENSE를 참조하십시오.

감사의 말

  • Anthropic의 MCP SDK로 구축됨

  • Zod을 사용한 데이터 검증

  • Bun으로 개발됨

Available Tools

14 tools
get_accountsA
Read-only

Get all accounts with balances, plus summary fields: total_balance (net worth = assets minus liabilities), total_assets, and total_liabilities. Optionally filter by account type (checking, savings, credit, investment). Checks both account_type and subtype fields for better filtering (e.g., finds checking accounts even when account_type is 'depository'). By default, hidden accounts are excluded.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_typeNoFilter by account type (checking, savings, credit, loan, investment, depository). Note: summary totals (total_assets, total_liabilities, total_balance) reflect only the filtered subset.
include_hiddenNoInclude hidden accounts (default: false)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. The description adds that summary totals apply only to the filtered subset, that hidden accounts are excluded by default, and that both account_type and subtype are checked for filtering—all beyond what annotations provide.

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?

Three sentences, front-loaded with the primary purpose, no redundant text. Every sentence adds important detail without verbosity.

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

Completeness5/5

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

Given no output schema, the description adequately explains return values (summary fields) and filtering nuances. It covers all necessary context for a simple read-only tool with two optional parameters.

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

Parameters4/5

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

Schema covers 100% of parameters, but the description adds value: lists example account types, explains the dual-field filtering mechanism, and notes that summary totals reflect only the filtered subset. This helps the agent use parameters correctly.

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 clearly states it retrieves all accounts with balances and summary fields (total_balance, total_assets, total_liabilities), with optional filtering by account type and exclusion of hidden accounts. This distinguishes it from sibling tools like get_balance_history or get_transactions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides context on filtering options and default behavior (hidden accounts excluded), but does not explicitly contrast with sibling tools or specify when not to use it. The hint about dual-field filtering aids correct invocation.

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

get_balance_historyA
Read-only

Get daily balance snapshots for accounts over time. Each entry returns current_balance, available_balance, limit, account_id, and account_name. The response also includes an accounts array listing the distinct account IDs in the paginated page. Requires a granularity parameter (daily, weekly, or monthly) to control response size. Weekly and monthly modes downsample by keeping the last data point per period. Filter by account_id and date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idNoFilter by account ID
start_dateNoStart date (YYYY-MM-DD)
end_dateNoEnd date (YYYY-MM-DD)
granularityYesRequired. Controls response density: daily (every day), weekly (one per week), or monthly (one per month). Use weekly or monthly for longer time ranges.
limitNoMaximum number of results (default: 100, max: 10000)
offsetNoNumber of results to skip for pagination (default: 0)

TDQS

A4.4/5.0
Behavior4/5

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

The description adds context beyond the readOnlyHint annotation by disclosing downsampling behavior ('Weekly and monthly modes downsample by keeping the last data point per period') and noting the accounts array in the response. No contradictions with annotations.

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 compact (4 sentences), front-loaded with the core purpose, and each sentence adds non-redundant information. No filler or wasted words.

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

Completeness4/5

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

Given 6 parameters (1 required) and no output schema, the description explains return fields, accounts array, granularity modes, and filtering. It covers pagination implicitly via offset/limit but does not mention ordering or error conditions. Fairly complete for the complexity.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds meaning by explaining the effect of granularity on response density and mentioning filtering options. It also describes the response structure, which is not in the input schema.

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 specifically states 'Get daily balance snapshots for accounts over time' and lists the returned fields. It clearly distinguishes itself from sibling tools like get_accounts or get_transactions, which deal with different data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains that granularity is required and gives guidance on when to use weekly/monthly ('Use weekly or monthly for longer time ranges'). It also mentions filtering by account_id and date range. However, it does not explicitly state when not to use this tool or provide alternatives.

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

get_budgetsA
Read-only

Get budgets from Copilot's native budget tracking. Returns the current-month effective budget per category plus the full amounts map of per-month overrides for history lookups. For parent categories, the returned amount is the resolved total (children + rollovers) that Copilot displays in the Budgets view. Totals use the current-month effective amount.

ParametersJSON Schema
NameRequiredDescriptionDefault
active_onlyNoOnly return active budgets (default: false)

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. The description adds value by detailing that budgets are from native tracking, returns effective budget per category and amounts map, and explains resolved totals for parent categories. No contradictions.

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?

Three sentences, front-loaded with the main action, and every sentence adds necessary information. No redundancy or wasted words.

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

Completeness4/5

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

No output schema, but the description compensates by explaining return values (effective budget, amounts map, resolved totals). It provides sufficient context for a simple read operation.

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 100% of the single parameter (active_only) with a clear description. The tool description adds no additional meaning to the parameter beyond what the schema provides, so baseline score of 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 clearly states it retrieves budgets from Copilot's native budget tracking, specifies the return content (current-month effective budget per category plus full amounts map), and explains behavior for parent categories. It distinguishes itself from sibling tools by focusing on budgets.

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 implies usage for budget retrieval but does not explicitly state when to use this tool versus alternatives like get_transactions or get_categories. No exclusions or when-not-to-use guidance is provided.

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

get_cache_infoA
Read-only

Get information about the local data cache, including the date range of cached transactions and total count. Useful for understanding data availability before running historical queries. This tool reads from a local cache that may not contain your complete transaction history.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description discloses that the tool reads from a local cache that may not contain complete transaction history, adding valuable behavioral context.

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 concise, with three sentences that front-load the purpose, then provide usage context and a behavioral caveat. No wasted words.

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

Completeness4/5

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

For a simple tool with no parameters and no output schema, the description sufficiently covers purpose, usage, and limitations. It lacks specifics about return structure but is adequate for an agent.

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

Parameters4/5

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

The input schema has zero parameters, and the description does not need to add parameter details. Per guidelines, a baseline score of 4 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 clearly states the tool retrieves information about the local data cache, specifically the date range and total count of cached transactions. This distinguishes it from sibling tools like get_accounts or get_transactions.

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 notes the tool is 'useful for understanding data availability before running historical queries,' implying a preparatory use case. However, it does not explicitly state when not to use it or name alternative tools.

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

get_categoriesA
Read-only

Unified category retrieval tool. Supports multiple views: list (default) - user categories with transaction counts/amounts for a time period; tree - user categories as hierarchical tree; search - search user categories by keyword. Use parent_id to get subcategories. For list view, use period (e.g., "this_month") or start_date/end_date to filter by date. Includes all categories, even those with $0 spent (matching UI behavior).

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoView mode: list (categories with spend totals), tree (parent/child hierarchy), search (find by keyword)
periodNoTime period for list view (e.g., 'this_month', 'last_month', 'last_30_days', 'this_year'). Takes precedence over start_date/end_date if provided.
start_dateNoStart date for list view (YYYY-MM-DD format)
end_dateNoEnd date for list view (YYYY-MM-DD format)
parent_idNoGet subcategories of this parent category ID
queryNoSearch query (required for 'search' view)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations provide readOnlyHint: true. The description adds that the tool includes categories with $0 spent, matching UI behavior, and explains the behavior of different views. This goes beyond annotations.

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 fairly concise given the complexity of three views and multiple parameters. It is front-loaded with the main purpose. Minor redundancy could be trimmed, but overall efficient.

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

Completeness4/5

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

The description covers all major aspects: views, filtering, parent_id, date options, and the inclusion of zero-spend categories. Despite no output schema, the description is sufficient for an agent to use the tool correctly.

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

Parameters4/5

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

The input schema covers all parameters with descriptions (100% coverage). The description adds extra meaning by explaining that categories with $0 spent are included, and that period takes precedence over dates, which is not in the schema.

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 clearly states 'Unified category retrieval tool' and explains three distinct views (list, tree, search) with specific use cases. It distinguishes itself from sibling tools like get_accounts and get_transactions by focusing on category data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use each view (e.g., list for spend totals, tree for hierarchy, search for keyword) and how to filter by date or parent_id. However, it does not explicitly state when not to use this tool or mention alternatives.

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

get_connection_statusA
Read-only

Get connection status for all linked financial institutions. Shows per-institution sync health including last successful update timestamps for transactions and investments, login requirements, and error states. Use this to check when accounts were last synced or to identify connections needing attention.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

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

Discloses what the tool shows (per-institution sync health, timestamps, login requirements, error states) beyond the readOnlyHint annotation. No contradictions; annotation reinforces the read-only nature.

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?

Two sentences with no wasted words. First sentence states purpose, second adds detail and usage guidance. Front-loaded with key information.

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

Completeness4/5

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

Covers purpose, usage, and output details adequately for a parameterless read tool. Lacks explicit output structure format, but the description of what it shows is sufficient for correct invocation.

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

Parameters4/5

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

No parameters exist, baseline score of 4. Description adds no parameter info because none are needed.

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?

Clearly states it retrieves connection status for all linked financial institutions, specifying the resource (connection status) and the verb (get). Distinguishes from siblings like get_accounts by focusing on sync health, timestamps, login requirements, and error states.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to use for checking last sync timestamps and identifying problematic connections, providing clear usage context. Does not exclude alternatives, but no sibling tool serves this specific purpose.

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

get_goal_historyA
Read-only

Get monthly progress snapshots for financial goals. Returns current_amount, target_amount, daily data points, and contribution records per month. Filter by goal_id or month range (YYYY-MM). Cache-only: no live-mode (--live-reads) counterpart exists because Copilot's GraphQL endpoint does not expose goal data, so this tool always returns cached LevelDB data regardless of the --live-reads flag.

ParametersJSON Schema
NameRequiredDescriptionDefault
goal_idNoFilter by goal ID
start_monthNoStart month (YYYY-MM)
end_monthNoEnd month (YYYY-MM)
limitNoMaximum number of results (default: 100, max: 10000)
offsetNoNumber of results to skip for pagination (default: 0)

TDQS

A4.6/5.0
Behavior5/5

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

The description adds significant behavioral context beyond the readOnlyHint annotation, explaining that the tool is always cached, ignores the --live-reads flag, and why (backend limitation). This helps the agent understand the tool's data freshness and constraints.

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 three sentences, each serving a purpose: purpose, return fields, and cache behavior. It is front-loaded with the core function, then details, then important behavioral note. No unnecessary words.

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

Completeness4/5

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

For a tool with 5 optional parameters and no output schema, the description covers purpose, return fields, filtering, and cache behavior. It does not explain pagination parameters (limit/offset) but those are standard and described in the schema. Overall, it provides enough context for the agent to select and use the tool.

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

Parameters4/5

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

The input schema has 100% description coverage, so the description doesn't need to repeat parameter details. However, it adds value by clarifying that the tool returns 'daily data points' and 'contribution records per month,' which are not in the schema. This enriches the agent's understanding of the output.

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 clearly states the tool retrieves monthly progress snapshots for financial goals, listing specific return fields (current_amount, target_amount, daily data points, contribution records). It distinguishes from siblings like get_goals or get_balance_history by focusing on monthly history snapshots.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states this tool is cache-only and always returns cached data, with no live-mode counterpart. It explains the reason (GraphQL endpoint does not expose goal data), guiding the agent on when to use this tool versus others. It could be improved by explicitly stating when not to use, but the context is clear.

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

get_goalsA
Read-only

Get financial goals from Copilot's native goal tracking. Retrieves user-defined savings goals, debt payoff targets, and investment goals. Returns goal details including target amounts, monthly contributions, status (active/paused), start dates, and tracking configuration. Calculates total target amount across all goals. Cache-only: no live-mode (--live-reads) counterpart exists because Copilot's GraphQL endpoint does not expose goal data, so this tool always returns cached LevelDB data regardless of the --live-reads flag.

ParametersJSON Schema
NameRequiredDescriptionDefault
active_onlyNoOnly return active goals (default: false)

TDQS

A4.4/5.0
Behavior5/5

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

Discloses beyond readOnlyHint: always returns cached LevelDB data regardless of --live-reads flag, alerting the agent to staleness. No contradiction with annotations.

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?

Two sentences efficiently convey purpose and key constraint. Could be slightly more structured with bullet points, but no waste.

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

Completeness5/5

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

Given simple read-only tool with one parameter and no output schema, description covers all essential aspects: goals covered, fields returned, cache limitation, and no live mode.

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?

Input schema has 1 parameter with full description. Description adds no new info beyond schema, so 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 clearly states it retrieves financial goals from Copilot's native goal tracking, listing types (savings, debt, investment) and details returned. It distinguishes from siblings like get_accounts and get_budgets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly mentions cache-only nature and lack of live-mode counterpart, indicating when to use. No explicit alternatives among siblings, but context implies this is the only goal tool.

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

get_holdingsA
Read-only

Get current investment holdings with position-level detail. Returns ticker, name, quantity, current price, equity value, average cost, and total return per holding. Joins data from account holdings, securities, and optionally historical snapshots. Filter by account or ticker symbol. Note: cost_basis may be unavailable for cash-equivalent positions.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idNoFilter by investment account ID
ticker_symbolNoFilter by ticker symbol (e.g., "AAPL", "SCHX")
include_historyNoInclude monthly price/quantity snapshots per holding (default: false)
limitNoMaximum number of results (default: 100, max: 10000)
offsetNoNumber of results to skip for pagination (default: 0)

TDQS

A4.6/5.0
Behavior5/5

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

Discloses that cost_basis may be unavailable for cash-equivalent positions, adding value beyond the readOnlyHint annotation. No contradictions with annotations.

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?

Concise two-sentence description plus a note, front-loaded with main action and no unnecessary detail.

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

Completeness4/5

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

Covers key aspects: returned data, filters, optional history, caveat about cost basis. Pagination is implied by limit/offset in schema. No output schema, but description compensates.

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

Parameters4/5

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

Schema coverage is 100%, so description adds marginal value by explaining return fields and joins, and noting default false for include_history. Parameters are well-documented in schema.

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?

Description clearly states 'Get current investment holdings with position-level detail' and lists specific fields returned (ticker, name, quantity, etc.), distinguishing it from siblings like get_accounts and get_balance_history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Mentions filtering by account or ticker and optional history inclusion, providing clear context for when to use this tool. Does not explicitly state when not to use, but purpose is distinct from siblings.

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

get_investment_pricesA
Read-only

Get investment price history for portfolio tracking. Returns daily and high-frequency price data for stocks, ETFs, mutual funds, and crypto. Filter by ticker symbol, date range, or price type (daily/hf). Includes OHLCV data when available.

ParametersJSON Schema
NameRequiredDescriptionDefault
ticker_symbolNoFilter by ticker symbol (e.g., "AAPL", "BTC-USD", "VTSAX")
start_dateNoStart date (YYYY-MM-DD or YYYY-MM)
end_dateNoEnd date (YYYY-MM-DD or YYYY-MM)
price_typeNoFilter by price type: daily (monthly aggregates) or hf (high-frequency intraday)
limitNoMaximum number of results (default: 100, max: 10000)
offsetNoNumber of results to skip for pagination (default: 0)

TDQS

A4.2/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=true, which is consistent. The description adds that the tool returns daily and high-frequency data and includes OHLCV data. However, it does not discuss pagination behavior, data freshness, or rate limits. The schema covers pagination parameters, so the description provides moderate added value.

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, front-loaded with the core purpose, and includes essential details without unnecessary words. Every sentence adds value.

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

Completeness4/5

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

Given no output schema, the description adequately covers return content (OHLCV) and filters. It does not specify default behavior when no filters are applied (e.g., returns recent prices for all assets), but this is a minor gap. Overall, it is fairly complete for a read-only data retrieval tool.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds meaning by explaining price_type enum values ('daily' as monthly aggregates, 'hf' as high-frequency intraday) and mentions OHLCV data availability, which goes beyond the schema.

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 clearly states the tool retrieves investment price history for portfolio tracking, specifies asset types (stocks, ETFs, mutual funds, crypto), and lists filters (ticker, date range, price type). This distinguishes it from siblings like get_holdings or get_balance_history.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool (portfolio tracking) but does not explicitly state when not to use it or suggest alternatives. The sibling tools are related but the description implies its scope effectively.

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

get_investment_splitsA
Read-only

Get stock split events from the local Firestore cache. Returns one row per (security, effective_date) with the adjustment multiplier (e.g. 0.1 for a 10-for-1 split — multiply pre-split prices/quantities by this value to convert to the post-split equivalent). Joined with the securities collection so each row includes ticker and name. IMPORTANT: prices returned by get_investment_prices and get_investment_prices_live are ALREADY split-adjusted by Copilot. Use this tool only when you need the split events themselves (e.g., for narrative or historical-analysis purposes) — you do NOT need to apply these multipliers to the prices yourself. Securities that have never split are not included in the output. Coverage is limited to securities Copilot currently syncs in your local cache (typically currently-held or recently-held).

ParametersJSON Schema
NameRequiredDescriptionDefault
ticker_symbolNoOptional. Case-insensitive ticker filter (e.g. "NVDA").
start_dateNoOptional. Inclusive lower bound on effective_date (YYYY-MM-DD).
end_dateNoOptional. Inclusive upper bound on effective_date (YYYY-MM-DD).
limitNoMaximum number of rows. Default 100, max 10000.
offsetNoPagination offset, default 0.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, and the description adds details about output structure (one row per security/date), the meaning of the multiplier, the join with securities, and cache coverage. No contradictions.

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 front-loaded with purpose and details, then usage guidance. It is somewhat lengthy but all sentences add value. Could be slightly more concise, but structure is logical.

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

Completeness5/5

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

Despite no output schema, the description fully explains the output structure, including the multiplier meaning and joined fields. All 5 parameters are well-documented. The tool's behavior is completely described.

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

Parameters4/5

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

Schema coverage is 100% with good descriptions, but the description adds extra context (e.g., case-insensitive ticker, inclusive date bounds, effective_date field name). This enhances clarity beyond the schema.

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 clearly states it retrieves stock split events from the local Firestore cache, specifying verb 'get', resource 'stock split events', and scope. It distinguishes from siblings like get_investment_prices by noting that those return already-adjusted prices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool ('when you need the split events themselves') and when not to ('you do NOT need to apply these multipliers to the prices yourself'). Also mentions coverage limitations, guiding the agent appropriately.

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

get_recurring_transactionsA
Read-only

Identify recurring/subscription charges. Combines two data sources: (1) Pattern analysis - finds transactions from same merchant with similar amounts, returns estimated frequency, confidence score, and next expected date. (2) Copilot's native subscription tracking - returns user-confirmed subscriptions stored in the app. Both sources are included by default for comprehensive coverage.

ParametersJSON Schema
NameRequiredDescriptionDefault
min_occurrencesNoMinimum number of occurrences to qualify as recurring (default: 2)
periodNoPeriod to analyze (default: last_90_days). Options: this_month, last_month, last_7_days, last_30_days, last_90_days, ytd, this_year, last_year
start_dateNoStart date (YYYY-MM-DD)
end_dateNoEnd date (YYYY-MM-DD)
include_copilot_subscriptionsNoInclude Copilot's native subscription tracking data (default: true). Returns copilot_subscriptions array with user-confirmed subscriptions.
nameNoFilter by name (case-insensitive partial match). When filtering, returns detailed view with additional fields like min_amount, max_amount, match_string, account info, and transaction history.
recurring_idNoFilter by exact recurring ID. When filtering, returns detailed view with additional fields like min_amount, max_amount, match_string, account info, and transaction history.

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. The description adds value by detailing the dual data sources and what each returns (estimated frequency, confidence score, next expected date, user-confirmed subscriptions). It does not contradict annotations.

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 three sentences, front-loaded with the purpose, and no unnecessary information.

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

Completeness4/5

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

The description provides a good overview of the tool's behavior and output fields. However, because no output schema exists, a brief note on the overall output structure would improve completeness, though the mention of specific fields is helpful.

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%, so baseline is 3. The description does not add significant meaning beyond the schema's parameter descriptions; it only explains the tool's purpose.

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 clearly states the tool identifies recurring/subscription charges and explains it combines two data sources (pattern analysis and native subscription tracking). This distinguishes it from siblings like get_transactions which return all transactions.

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 implies usage for finding recurring charges but does not explicitly state when to avoid using it or name alternatives like get_transactions for non-recurring queries.

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

get_transactionsA
Read-only

Reads from the local LevelDB cache, which may lag behind Copilot's server if the macOS app hasn't synced recently. For real-time data use --live-reads with get_transactions_live. Unified transaction retrieval tool. Supports multiple modes: (1) Filter-based: Use period, date range, category, merchant, amount filters. (2) Single lookup: Provide transaction_id to get one transaction. (3) Text search: Use query for free-text merchant search. (4) Special types: Use transaction_type for foreign/refunds/credits/duplicates/hsa_eligible/tagged. (5) Location-based: Use city or lat/lon with radius_km. (6) Tag filter: Use tag to find transactions with a specific tag. Returns human-readable category names and normalized merchant names.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoPeriod shorthand: this_month, last_month, last_7_days, last_30_days, last_90_days, ytd, this_year, last_year
start_dateNoStart date (YYYY-MM-DD)
end_dateNoEnd date (YYYY-MM-DD)
categoryNoFilter by category (case-insensitive substring)
merchantNoFilter by merchant name (case-insensitive substring)
account_idNoFilter by account ID
min_amountNoMinimum transaction amount
max_amountNoMaximum transaction amount
limitNoMaximum number of results (default: 100)
offsetNoNumber of results to skip for pagination (default: 0)
exclude_transfersNoExclude transfers between accounts and credit card payments (default: true)
exclude_deletedNoExclude deleted transactions marked by Plaid (default: true)
exclude_excludedNoExclude user-excluded transactions (default: true)
exclude_split_parentsNoExclude split-transaction parents (docs with children_transaction_ids). The children already carry the real categorized amounts — returning the parent would double-count the spend. Default: true.
pendingNoFilter by pending status (true for pending only, false for settled only)
regionNoFilter by region/city (case-insensitive substring)
countryNoFilter by country code (e.g., US, CL)
transaction_idNoGet a single transaction by ID (ignores other filters)
queryNoFree-text search in merchant/transaction names
transaction_typeNoFilter by special type: foreign (international), refunds, credits (cashback/rewards), duplicates (potential duplicate transactions), hsa_eligible (medical expenses), tagged (has tags)
tagNoFilter by tag name (e.g. "vacation")
cityNoFilter by city name (partial match)
latNoLatitude for proximity search (use with lon and radius_km)
lonNoLongitude for proximity search (use with lat and radius_km)
radius_kmNoSearch radius in kilometers (default: 10)

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses behavioral traits beyond the readOnlyHint annotation: it explains the tool reads from a local LevelDB cache that may lag, describes return format (human-readable category names, normalized merchant names), and details six distinct usage modes. No contradiction with annotations exists.

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 well-organized with numbered list for modes and key caveat upfront. However, it is slightly verbose with some redundant phrasing (e.g., 'Unified transaction retrieval tool' followed by detailed enumeration). Every sentence is useful, but conciseness could be improved.

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

Completeness5/5

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

Given the tool's complexity (25 parameters, no output schema), the description thoroughly covers all usage modes, data source characteristics, caching latency, and output format. It provides complete guidance for an AI agent to correctly select and invoke the tool.

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

Parameters5/5

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

Despite 100% schema coverage, the description adds substantial contextual meaning by grouping parameters into intuitive modes (e.g., 'location-based: Use city or lat/lon with radius_km'). It explains how parameters interact, such as 'transaction_id ignores other filters' and 'exclude_split_parents avoids double-counting'. This goes far beyond the schema descriptions.

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 clearly states 'Unified transaction retrieval tool' and enumerates multiple specific modes, each with distinct purposes (filter-based, single lookup, text search, special types, location-based, tag filter). The name 'get_transactions' directly indicates the action and resource, effectively distinguishing it from sibling tools like 'get_accounts' or 'get_budgets'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly warns about cache lag and directs users to 'get_transactions_live' for real-time data. It outlines when to use each mode (e.g., 'single lookup: Provide transaction_id'). However, it lacks explicit when-not-to-use guidance or exclusion of other tools beyond the live alternative.

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

refresh_databaseA
Read-only

Refresh the in-memory cache by reloading data from the local Copilot Money database. Use this when the user has recently synced new transactions in the Copilot Money app, or when you suspect the cached data is stale. The cache also auto-refreshes every 5 minutes. Returns the updated cache info after refresh.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Discloses that it reloads from local database, returns cache info, and auto-refreshes. No contradiction with readOnlyHint=true. Adds value beyond annotations.

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?

Three sentences, no fluff, front-loaded with purpose, then usage, then additional context. Every sentence earns its place.

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

Completeness4/5

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

Given no parameters and simple operation, description is complete. Mentions return of cache info, which is sufficient though slightly vague.

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

Parameters4/5

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

No parameters; schema coverage 100%. Baseline score 4 for zero-param tool; description adds no parameter info but none needed.

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?

Clearly states 'Refresh the in-memory cache by reloading data from the local Copilot Money database'. Verb and resource specific, distinct from sibling get_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use: after user syncs new transactions or when cache may be stale. Notes auto-refresh every 5 minutes but lacks explicit exclusions or alternatives.

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. 5 tool updatesv2.2.0
    • Removedget_investment_performance
    • Changedget_investment_splits5 fields changed
      • changedInput schema / properties / end_date / description
        Previous value: -"End date (YYYY-MM-DD)"New value: +"Optional. Inclusive upper bound on effective_date (YYYY-MM-DD)."
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of results (default: 100, max: 10000)"New value: +"Maximum number of rows. Default 100, max 10000."
      • changedInput schema / properties / offset / description
        Previous value: -"Number of results to skip for pagination (default: 0)"New value: +"Pagination offset, default 0."
      • changedInput schema / properties / start_date / description
        Previous value: -"Start date (YYYY-MM-DD)"New value: +"Optional. Inclusive lower bound on effective_date (YYYY-MM-DD)."
      • changedInput schema / properties / ticker_symbol / description
        Previous value: -"Filter by ticker symbol (e.g., \"AAPL\", \"TSLA\")"New value: +"Optional. Case-insensitive ticker filter (e.g. \"NVDA\")."
    • Removedget_securities
    • Changedget_transactions1 field changed
      • addedInput schema / properties / exclude_split_parents
        Added value: +{
        +  "default": true,
        +  "description": "Exclude split-transaction parents (docs with children_transaction_ids). The children already carry the real categorized amounts — returning the parent would double-count the spend. Default: true.",
        +  "type": "boolean"
        +}
    • Removedget_twr_returns
  2. 17 tool updatesv2.0.1
    • First observedget_accounts
    • First observedget_balance_history
    • First observedget_budgets
    • First observedget_cache_info
    • First observedget_categories
    • First observedget_connection_status
    • First observedget_goal_history
    • First observedget_goals
    • First observedget_holdings
    • First observedget_investment_performance
    • First observedget_investment_prices
    • First observedget_investment_splits
    • First observedget_recurring_transactions
    • First observedget_securities
    • First observedget_transactions
    • First observedget_twr_returns
    • First observedrefresh_database

TDQS

A4.4/5.0

Scored across 14 tools

Disambiguation5/5

Each tool serves a distinct purpose: accounts, balance history, budgets, categories, goals, holdings, transactions, etc. Even closely related tools like get_goals and get_goal_history are clearly differentiated by their descriptions (current goals vs. historical progress). There is no ambiguity in tool selection.

Naming Consistency4/5

All tools except refresh_database follow the consistent get_<noun> pattern. The one outlier (refresh_database) uses a verb_noun pattern that deviates from the others, but the overall naming is predictable and readable.

Tool Count5/5

With 14 tools, the set thoroughly covers the key domains of personal finance: accounts, transactions, budgets, goals, investments, and system status. Each tool earns its place; there are no redundant or extraneous tools.

Completeness5/5

The toolset provides comprehensive read access to all major data types in Copilot Money: accounts, transactions (with filters, search, special types), budgets, categories (with multiple views), goals, recurring transactions, investment holdings, investment prices, and connection status. The addition of refresh_database for cache management shows attention to data freshness. There are no obvious gaps for a read-only personal finance tool.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

  • Personal finance for AI agents — onboard, import statements, categorize & budget over MCP.

  • The Ramp MCP server enables users to securely connect Ramp with AI assistants like ChatGPT and Claude to query financial data and take actions using natural language. It transforms Ramp's developer API into a SQL interface that LLMs can query, allowing admins to analyze spend trends, identify cost savings, and run complex SQL analyses on comprehensive datasets (transactions, purchase orders, vendors, users), while all users can manage cards, view transactions, request reimbursements, and get expense policy answers.

  • MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.

  • The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    MCP server that provides AI assistants access to stock market data including financial statements, stock prices, and market news through a Model Context Protocol interface.
    11
    2,287
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server implementation that provides programmatic access to personal finance data through LunchMoney's API, enabling AI assistants to manage transactions, budgets, categories, and assets.
    59
    5,048 npm
    104
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage Splitwise expenses with atomic duplicate prevention, smart fuzzy matching, and support for flexible split ratios between two people.
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to perform comprehensive Microsoft Excel operations including data analysis, cell editing, advanced formatting, and VBA execution on Windows systems. It provides a structured workflow for managing workbooks and worksheets through a dedicated Model Context Protocol interface.
    5
    95 npm
    4
    MIT