Skip to main content
Glama
cubicecho

MCP Actual

by cubicecho

Preview what the rules would change

preview_rule_effects
Read-onlyIdempotent

Preview how budget rules would modify existing transactions without saving, showing field changes before applying them.

Instructions

Run the budget’s rules over EXISTING transactions without saving anything, and report the field changes they would make. Actual applies rules on import and edit only, so transactions already in the budget are untouched until you act on them — this shows what a rule would have done to them. The usual flow is create_rule, then this to check it against real data, then apply_rule_actions to make the changes stick. IMPORTANT: this reports the net effect of the ENTIRE rule set, not one rule in isolation. Actual has no per-rule preview, and rules interact by rank, so a change shown here may come from a rule other than the one you just wrote. Verify against list_rules before assuming which rule caused it. Each change gives from/to as readable names plus fromId/toId for the fields that hold ids — pass toId as the action value to apply_rule_actions. Transactions the rules would not change are omitted, so an empty entries with a non-zero scanned means the rules are a no-op here.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoHow many transactions to scan. Default 100.
dateToNoOnly transactions on or before this date (YYYY-MM-DD).
offsetNoHow many matching transactions to skip, for paging past `limit`. Keep the other filters identical.
payeeIdNoRestrict to one payee.
dateFromNoOnly transactions on or after this date (YYYY-MM-DD).
accountIdNoRestrict to one account.
categoryIdNoRestrict to one category.
notesContainsNoSubstring match against notes.
uncategorizedNoOnly transactions with no category — the usual cleanup target.
payeeNameContainsNoSubstring match against the payee name.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.0.1

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnly=true, destructive=false, idempotent=true. The description goes well beyond: it discloses that Actual only applies rules on import/edit so existing transactions are untouched (the key behavioral subtlety), that rules interact by rank so attribution is ambiguous, that unchanged transactions are omitted (empty entries + non-zero scanned = no-op), and that it reports net effect of the whole ruleset. This is rich, non-obvious behavioral context that annotations cannot convey.

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?

Front-loaded with the core action and the no-save guarantee; then flow, then the critical caveat (whole-ruleset, rank interaction), then output-shape guidance. Each sentence earns its place with distinct, actionable information. No filler.

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?

For a 10-param read-only tool with no output schema, the description compensates by explaining the shape of the response (from/to, fromId/toId), the empty-entries case, and the interop handoff to apply_rule_actions. Annotations cover safety; description covers behavior and output interpretation. Everything an agent needs to call and interpret this correctly is present.

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 all 10 filter parameters are documented in the schema (limit, dateFrom/dateTo, payeeId, accountId, categoryId, notesContains, uncategorized, payeeNameContains, offset). The description adds semantic value by explaining what the response contains ('from'/'to' names plus 'fromId'/'toId') and instructing the caller to 'pass toId as the action value to apply_rule_actions' — a non-obvious interoperability hint. The description doesn't cover pagination semantics, but the schema does note 'Keep the other filters identical.' Solidly above baseline.

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 and resource ('Run the budget's rules over EXISTING transactions without saving anything, and report the field changes they would make'). This clearly distinguishes it from apply_rule_actions (which saves) and create_rule (which authors). The distinction between preview and apply is explicit and unambiguous.

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 names the flow: 'create_rule, then this to check it against real data, then apply_rule_actions to make the changes stick.' It also gives an important caveat: this is a net effect of the ENTIRE ruleset, not one rule, and it points the agent to list_rules to disambiguate. This is textbook when-to-use/when-not guidance with named alternatives.

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