---
summary: "Query responses now echo effective search criteria and resolved mode on every call (#5); itemized Schedule A/B/E rows hoist the shared committee object instead of repeating it per row (#11); aggregate modes on the three schedule tools reject itemized-only filters instead of silently ignoring them (#23)"
breaking: true
security: false
---

# 0.6.0 — 2026-07-26

## Breaking

- **Itemized Schedule A/B rows no longer carry a nested `committee` object.** It is hoisted to a top-level `committee` field once per response — `committee_id` is required by both endpoints, so the object was identical across every row. The flat `committee_id` on each row is unchanged. ([#11](https://github.com/cyanheads/openfec-mcp-server/issues/11))
- **Itemized Schedule E rows carry a nested `committee` only when the request omitted `committee_id`.** With `committee_id` supplied, read the top-level `committee` field instead — a candidate- or race-scoped page spans several spending committees, so no single one is hoisted. ([#11](https://github.com/cyanheads/openfec-mcp-server/issues/11))
- **Itemized Schedule E rows drop the nested `candidate` object.** `candidate_id` stays flat on the row; the object's `idx` and `two_year_period` (which restated the query's cycle) are gone. ([#11](https://github.com/cyanheads/openfec-mcp-server/issues/11))
- **Aggregate modes on `openfec_search_contributions`, `openfec_search_disbursements`, and `openfec_search_expenditures` now reject itemized-only inputs** with `itemized_only_filters_in_aggregate_mode` instead of silently ignoring them and returning an unfiltered aggregate. `cursor` is included in the rejected set. ([#23](https://github.com/cyanheads/openfec-mcp-server/issues/23))
- **`candidate_party_not_supported_by_candidate` is removed**, folded into the general `itemized_only_filters_in_aggregate_mode` reason — match that string and read `inapplicable_inputs` instead. ([#23](https://github.com/cyanheads/openfec-mcp-server/issues/23))
- **`openfec_search_expenditures.most_recent` and `openfec_lookup_elections.election_full` lost their `default: true` in the advertised input schema.** A schema default made an omitted value indistinguishable from an explicit one, which the new presence-checks require. Both still default to `true` at the point of use in the branches that accept them. ([#23](https://github.com/cyanheads/openfec-mcp-server/issues/23))
- **`openfec_lookup_elections` rejects `election_full` combined with `zip`** (`inputs_not_applicable_to_mode`) — a ZIP-scoped search runs an endpoint with no such parameter; it was previously ignored. ([#23](https://github.com/cyanheads/openfec-mcp-server/issues/23))
- **`openfec_lookup_calendar` rejects inputs belonging to another mode** (`inputs_not_applicable_to_mode`) instead of ignoring them. Its `mode` defaults to `events`, so an under-specified call passing e.g. `state` now errors instead of returning unfiltered events. ([#23](https://github.com/cyanheads/openfec-mcp-server/issues/23))
- **In-flight keyset cursors on all three itemized schedule tools are invalidated.** Cursor identity now binds to effective values (the resolved `cycle`, `most_recent`), so a cursor issued before this release is rejected as `cursor_query_mismatch` and must be reissued. ([#5](https://github.com/cyanheads/openfec-mcp-server/issues/5), [#23](https://github.com/cyanheads/openfec-mcp-server/issues/23))
- **`search_criteria` is always present** on all nine tools, populated on every response instead of only empty ones, and echoes effective filters — including server-applied `cycle`, `most_recent`, and `election_full` defaults. ([#5](https://github.com/cyanheads/openfec-mcp-server/issues/5))
- **`mode` is a new required output field** on `openfec_search_contributions`, `openfec_search_disbursements`, `openfec_search_expenditures`, `openfec_lookup_elections`, and `openfec_lookup_calendar`. Contributions reports the resolved variant — `by_size`/`by_state` scoped by `candidate_id` resolve to `by_size_candidate`/`by_state_candidate`, a different endpoint with a different row shape. ([#5](https://github.com/cyanheads/openfec-mcp-server/issues/5))

## Changed

- **Committee hoist saves roughly a third of the payload** on committee-scoped itemized pages: measured at −32.3% (Schedule A, 100 rows), −35.8% (Schedule B, 100 rows), and −37.4% (Schedule E, 20 rows, `committee_id` supplied) against live pulls. ([#11](https://github.com/cyanheads/openfec-mcp-server/issues/11))
