# Reported issues for onehome-mcp

Pod holds 18 of 25 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to [onehome-mcp](/mcp/onehome-mcp).

## Most discussed

### bulk resolver should run the same fallback rungs as single-call (parity audit)

Round 3 feedback exposed that `zillow_resolve_addresses` was running only the direct-resolver rung while `zillow_get_by_address` had grown a 3-rung strategy (direct → suffix-expansion → search-fallback). Real example: 20 addresses → 0 resolved via bulk, 17 resolved when looped through the single call. Filed as `chrischall/zillow-mcp#<TBD>`.

**This issue is the parity audit for `onehome_resolve_addresses` against `onehome_get_by_address`.** Confirm or fix:
1. Does the bulk resolver run *exactly*

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/42) · 2026-05-28 · closed · 1 comment

### Add bulk onehome_resolve_addresses(addresses[]) — companion to onehome_bulk_get

From the cross-MCP real-world report (item #4): every backfill workflow starts with "I have an address, give me an ID/URL," and resolving 60 addresses across two sessions took ~6 search calls + ~15 individual resolves + manual matching. A single batch call collapses this to one round trip.

## Differentiation from existing onehome_bulk_get

This is **distinct from** the already-filed `onehome_bulk_get` (issue #19, PR #29):

- `onehome_bulk_get(listing_ids[])` — takes **listing IDs**, returns inf

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/37) · 2026-05-27 · closed · 1 comment

### P2: add portal_url_hyperlink (Google-Sheets formula) to every property record

## Motivation

Today's session built 53 of these by string concat. Lift the URL-pattern knowledge server-side.

## Schema

Add `portal_url_hyperlink: string` to every property record:

```
portal_url_hyperlink: '=HYPERLINK("https://portal.onehome.com/en-US/properties/<id>","OneHome")'
```

Mirrors the per-row `url` field but in Sheets-paste-ready form.

## Acceptance

Pasting the value into a Google Sheet cell renders as a clickable "OneHome" link to the right listing.

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/24) · 2026-05-27 · closed · 1 comment

### P2: onehome_get_session_context should list ALL registered sessions + add active_session_id

## Motivation

With multi-session support (#9) the diagnostic tool needs to show the full set, not just the active one.

## Output

```
{
  active_session_id: "<id>",
  sessions: [
    { session_id, auth_mode, auth_ready, auth_expires_at, session_context },
    ...
  ]
}
```

When only one session is registered (today's behavior), the array has one entry and `active_session_id` points at it — backwards-compatible-shaped enough to keep the common path readable.

## Acceptance

Multi-session test 

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/22) · 2026-05-27 · closed · 1 comment

### P1: null out placeholder tax_annual: 1 and surface tax_is_estimated

## Problem

Real session saw `tax_annual: 1` on three Eagles Nest new-construction listings. Not a real tax bill — a not-yet-assessed placeholder. Caller treated $1 as a real number, which was wrong.

## Fix

- Null out `tax_annual` when its value is `1` (and probably `0`).
- Add `tax_is_estimated: boolean` — true when the upstream marks the value as a county estimate vs an actual bill (the data has a flag for this; check the raw payload).

## Acceptance

- Listing with raw `tax_annual: 1` → ret

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/17) · 2026-05-27 · closed · 1 comment

### P1: compute days_on_market + price_drop_amount + price_drop_percent on every record

## Motivation

Two derived fields every caller will want. Lift the math server-side.

## Fields

- `days_on_market: number | null` — from `major_change.at` when `major_change.type === "NewListing"`; else from a first-list timestamp if upstream provides one; else null.
- `price_drop_amount: number | null` — `previous_list_price - list_price` when both present.
- `price_drop_percent: number | null` — `(previous_list_price - list_price) / previous_list_price * 100`, rounded to 0.1.

## Acceptance

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/16) · 2026-05-27 · closed · 1 comment

### Auto-review follow-ups for PR #104: refactor(skill): move root SKILL.md into skills/, point plugin.json at ./skills/

<!-- auto-review-followup:PR-104 -->

Tracking auto-review follow-ups for #104 (verdict: **fail**).

### 🔴 Important
- [ ] Broken cross-skill documentation references in skills/onehome-fpx/references/graphql-operations.md — lines 6 and 32 contain ../SKILL.md that should be ../onehome/SKILL.md

---
When addressing the review on #104, resolve each item and add `Closes #<this issue>` to the PR once everything is genuinely fixed; deferred items stay open here. See the auto-review follow-up conventio

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/105) · 2026-07-13 · closed · external user · 0 comments

### P1: `onehome_set_auth` hangs ~4 min on a stale/invalid magic-link token instead of failing fast

## Summary

Calling `onehome_set_auth` with a **stale magic-link token** hangs for the full MCP client timeout (~4 minutes) before erroring, instead of returning a fast "token expired/invalid" error.

## Root cause

`onehome_set_auth` → `OneHomeClient.setAuthFromInput` → `DirectTransport.start()` → `exchangeEmailToken()` (`src/auth.ts:231`) does a bare `fetch(CHECK_TOKEN_URL, ...)` POST to `/api/authentication/checkToken` with **no per-attempt deadline**. When upstream wedges on a stale token (c

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/55) · 2026-05-29 · closed · 0 comments

## Most recent

### P0: every listing fetch fails — `UnparsedAddress` removed from OneHome `CustomProperty` schema

## Summary

**Source is 100% broken.** Every listing fetch fails upstream validation:

```
Validation error (FieldUndefined@[listingDetail/customProperty/UnparsedAddress]):
Field 'UnparsedAddress' in type 'CustomProperty' is undefined
```

OneHome (CoreLogic) dropped or renamed the `UnparsedAddress` field on the `CustomProperty` GraphQL type. Because the field is selected in our canonical `customProperty { ... }` selection set, the *entire* document is rejected at validation time — so it isn't j

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/54) · 2026-05-29 · closed · 0 comments

### set keepAliveIntervalMs: 25_000 in FetchproxyServer constructor (fetchproxy#71)

## Parent issue

[fetchproxy#71](https://github.com/chrischall/fetchproxy/issues/71) — cohort follow-up to opt Pattern A MCPs into proactive keep-alive (0.9.0 wave).

## The change

In `src/transport-fetchproxy.ts` (or equivalent), add `keepAliveIntervalMs: 25_000` to the `FetchproxyServer` constructor options:

```ts
const transport = new FetchproxyServer({
  serverName: 'onehome-mcp',
  // ... existing options
  keepAliveIntervalMs: 25_000,  // Round-3 #67 — proactive SW resident-keeping
});
`

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/48) · 2026-05-28 · closed · 0 comments

### add search-fallback rung to onehome_get_by_address (round-3 architectural gap)

## Architectural gap

Round-3 zillow corpus made the case: a real-world set of 20 mountain MLS addresses resolved 0/20 via zillow's direct-resolver rung but 17/20 via the price-band-bounded search-fallback rung. **The search-fallback rung was load-bearing**, not the price band per se.

`onehome_get_by_address` today runs **one rung**: a single `ListingSuggestionsSearch` GraphQL op against the magic-link-gated saved-search scope (`groupId`). When suggestions returns no row — the failure mode rura

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/44) · 2026-05-28 · closed · 0 comments

### fetchproxy service-worker eviction handling (capture-mode auth)

From the cross-MCP real-world report (item #22): today's session blocked entirely on "extension icon needs to be clicked to wake service worker." The same `bridge_down` error class affects every fetchproxy-backed MCP in the fleet.

## Scope for onehome-mcp

This applies to onehome **only in `fetchproxy_capture` mode** — i.e., when `ONEHOME_TOKEN` / `ONEHOME_MAGIC_LINK` env vars aren't set and the server falls through to the browser-extension bridge for captured auth.

**The env_token and magic_l

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/38) · 2026-05-27 · closed · 0 comments

### onehome_search_properties with group_id only silently returns 0 for consumer-share accounts

## Problem

`onehome_search_properties({ group_id })` without `saved_search_id` silently returns `{ count: 0, listings: [] }` for consumer-share accounts. The caller can't tell whether the group is genuinely empty or whether they hit the access-restricted path.

## Fix (two options)

**A. Auto-fall-back to the saved-search path** when the session context has a `savedSearchId` and the raw `listings(groupId, ...)` returns 0. Probably what the caller wanted.

**B. Surface a clear error** explaining

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/27) · 2026-05-27 · closed · 0 comments

### Add regression test for capture_request_header capability declaration

## Status

Fix landed in main as PR #9 (`fix(transport): declare capture_request_header capability on bridge`). Verified at `src/transport-fetchproxy.ts:97`:

```ts
capabilities: ['capture_request_header'],
```

## What's left

Add a regression test that exercises the fetchproxy bridge setup end-to-end:

1. Construct a `FetchproxyTransport` and verify `capabilities: ['capture_request_header']` is what gets handed to `FetchproxyServer` (spy on the constructor).
2. Verify the runtime `onehome_set_

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/26) · 2026-05-27 · closed · 0 comments

### P2: surface address_alternates[] when upstream MLS data has them

## Motivation

Today's session has an ongoing "109 vs 169 Overlook Point Ln" discrepancy between Compass and Canopy MLS. Better data plumbing might have flagged it sooner.

## Fix

If the upstream MLS payload has alternate address strings (different MLS feeds, prior addresses, parcel variants), surface them as `address_alternates: string[]` on the formatted record. Omit the field when absent or empty.

## Acceptance

A listing with two MLS address strings shows both in `address_alternates` (excl

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/25) · 2026-05-27 · closed · 0 comments

### P2: default include_listing_ids=true on onehome_get_saved_search

## Motivation

The saved search is essentially useless without its listingIds — that's the whole point. The current default-off setting forces every caller to pass the flag or follow up with another call.

## Change

Flip the default to `true`. Callers who explicitly don't want them pass `false`.

Behavior change — ship with the version bump for P0/P1.

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/23) · 2026-05-27 · closed · 0 comments

### P2: support multiple concurrent registered sessions in onehome_set_auth (route by MLS suffix)

## Motivation

Today's session had three magic-link tokens (HCAOR + 2× CANOPY) and re-auth'd mid-batch to switch between them — fragile if a single bulk fetch needs to span MLSes.

## Change

- `onehome_set_auth` registers an ADDITIONAL session rather than replacing the active one. Returns a `session_id`.
- Per-listing routing: extract the MLS suffix from `listing_id` (`~CANOPY`, `~HCAOR`, etc.) and pick the right session automatically.
- New `onehome_set_active_session(session_id)` lets the cal

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/21) · 2026-05-27 · closed · 0 comments

### P1: add onehome_get_saved_search_with_listings combo tool

## Motivation

The magic-link → "show me my saved homes" flow ALWAYS goes:

1. `onehome_get_saved_search` to get the saved search + listingIds
2. `onehome_search_properties(saved_search_id=...)` to inflate the listings

Two round trips for one conceptual action.

## Fix

Add `onehome_get_saved_search_with_listings` that combines both:

```
{
  saved_search: { id, name, ... },
  listings: [ { listing_id, ... }, ... ],
  count: N
}
```

## Acceptance

New-session-from-magic-link flow drops from 2 

[Read the thread](https://github.com/chrischall/onehome-mcp/issues/20) · 2026-05-27 · closed · 0 comments

The remaining reports are on [the project's issue tracker](https://github.com/chrischall/onehome-mcp/issues).
