Cowork24 MCP vs Onehome MCP
A side-by-side look at the Cowork24 MCP and Onehome MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Cowork24 MCP for real estate work; choose Onehome MCP for real estate as a local process. You can also run both side by side in one mcpServers block.
Which MCP server should you choose?
CChoose Cowork24 MCP when
- You need dedicated capabilities in the Real Estate domain.
Choose Onehome MCP when
- You need dedicated capabilities in the Real Estate domain.
- You prefer a local stdio subprocess transport.
- You have the keys it needs:
ONEHOME_TOKEN, ONEHOME_MAGIC_LINK. - You want tools like
onehome_get_user, onehome_get_groups, onehome_get_session_context.
Feature & specification comparison
Rows where the two servers differ are marked.
| Spec | C Cowork24 MCP | |
|---|---|---|
| Category | Real Estate | Real Estate |
| Quality signal | 37/100 · Fair | 63/100 · Good |
| Install command | Not confirmed yet | Confirmed |
| Transport | — | Local subprocess (stdio) |
| Auth | Not declared | Not declared |
| Pricing | Not declared | Not declared |
| Required env vars | None listed | ONEHOME_TOKENONEHOME_MAGIC_LINK |
| Verified owner | Community listing | Community listing |
| GitHub stars | — | 1 |
| Directory activity | 1 views 0 installs 0 upvotes | 1 views 0 installs 0 upvotes |
| Tools | Not listed | 21 |
| Full listing | View Cowork24 MCP | View Onehome MCP |
Tools & capabilities
Cowork24 MCP tools
No tool names declared yet. Check the project README from the listing page.
Onehome MCP tools 21
onehome_get_userReturns the OneHome user profile + the consumer-share groups attached. Share member e-mails and the agent's e-mail/phones are omitted unless `include_contacts: true`. For full agent / registered users, queries the GraphQL `user` endpoint. For magic-link consumer-share sessions (where `user { }` is access-denied), falls back to the data captured during the `checkToken` exchange — email, contact id, group/savedSearch ids, and the agent who shared with you.onehome_get_groupsList the OneHome groups your agent has shared with you. Share member e-mails and the agent's e-mail/phones are omitted unless `include_contacts: true`. For full agent / registered users, returns the GraphQL `user.groups` list. For magic-link consumer-share sessions (a single shared group), synthesizes a one-entry list from the `checkToken` session context.onehome_get_session_contextReturns one entry per registered session — its `session_id`, auth_mode, token expiry, and session scope (group_id / saved_search_id / agent_id / contact_id / mls_id) the MCP bootstrapped from each checkToken exchange. `active_session_id` flags which session answers by default; per-listing routing uses the active session when its `mls_id` matches the listing's `~MLS` suffix, else the one session that matches (several matches error — pick one with `onehome_set_active_session`). Tools default unspecified `group_id` / `saved_search_id` arguments from the active session's context, so this is the easiest way to see what they'll default to. Single-session use (the common case) returns a one-entry `sessions[]`.onehome_get_saved_searchFetch the agent-curated saved search by its id (UUID). Returns the search's name, filter criteria (`filters[]`), polygon, listing count, and the full list of OSK listing ids that compose the consumer share (`listing_ids`). Pass `include_listing_ids: false` to suppress the listing-id array if you only need the metadata. This is the canonical consumer-readable endpoint; the by-groupId variant is agent-only. `saved_search_id` defaults to the MCP's session context when omitted.onehome_get_saved_search_with_listingsCombo tool: the "show me my saved homes" flow in a single round trip. Internally runs `GetSavedSearchBySearchId` to fetch the saved search (name, filters, polygon, listingIds) and then `GetSavedListings` to inflate those listingIds into full property records — the same two-call sequence as calling `onehome_get_saved_search` followed by `onehome_search_properties(saved_search_id=...)`, but exposed as one tool so the magic-link-to-listings consumer flow is a single MCP call. Returns `{ saved_search, listings, count, page_info }`. Both `saved_search_id` and `group_id` default to the magic-link session context. Sort defaults to `property.MajorChangeTimestamp DESC` (Newest). Listings are returned via the GraphQL listing-card projection (`buildGetSavedListings`), which does NOT include `PublicRemarks` — so there is no raw `description` to opt back into here. Use `onehome_get_property(listing_id)` per row when you need the full description for a specific listing.onehome_search_propertiesFetch listings inside a OneHome consumer-share. Two modes: - With `saved_search_id`: fetch the agent-curated collection (the standard 'Homes at <name>' view). The MCP first resolves the saved search's listingIds and then inflates them via listingsBySavedSearchId — this is the only mode that works for non-agent consumer accounts. - With just `group_id` and no `saved_search_id`: try the raw `listings(groupId, browseParameter)` endpoint. If page 0 comes back empty with no reported results (the access-restricted shape consumer-shares hit) AND the session context has a `savedSearchId` for that same group, the tool falls back to the saved-search path and marks the response `fell_back_to_saved_search: true`. If there's no fallback target it raises a clear error rather than silently returning empty. An empty later page (paging past the end) is returned as an empty page, never swapped for the saved-search collection. Both args default from the MCP's bootstrapped session context (the magic-link checkToken response) when neither is passed explicitly. Sort is `MajorChangeTimestamp DESC` ('Newest') unless overridden. `include_dislikes: false` by default — flip it on to include listings you've thumbs-downed in OneHome. Listings here are returned via the GraphQL listing-card projection, which does NOT include `PublicRemarks` — so there is no `description` field on search results and no `include_description` flag to opt into one. Each listing carries the structured `extracted_features` object instead. Use `onehome_get_property(listing_id)` per row when you need the full description for a specific listing.onehome_search_suggestionsCross-feed suggestion search by address, MLS number, or partial query. Bypasses the group/saved-search structure and hits the global suggestion endpoint — useful for "find an address" or "look up by MLS number". Returns id, address parts, beds/baths, list price, thumbnail per match. Inflate any result with `onehome_get_property`. Optional `group_id` scopes suggestions to one OneHome market.onehome_get_propertyFetch full details for a single OneHome listing by id or portal URL. Returns address, list / close / previous price, $/sqft, beds/baths/sqft, lot size (raw `lot_size` {area, units} plus the derived `lot_size_acres` — null, never 0, for condos / lotless listings), year built, lat/lng, status, HOA fee, annual tax, virtual-tour URL, the primary photo, and an `extracted_features` block (lake_front, hot_tub, basement, furnished, dock, community) keyword-parsed from the description. The raw `description` (PublicRemarks) is omitted by default — pass `include_description: true` to keep it; in most cases the extracted features cover what callers need. OneHome scopes every listing to a group/market — `group_id` defaults to the magic-link session context; pass it explicitly only if you need to query a different group.onehome_get_property_photosFetch the full media gallery for a OneHome listing. Returns one entry per image with Thumbnail / Medium / Large CDN URLs, dimensions, the listing-room description (LongDescription), and display order. Pass either `listing_id` or a portal URL.onehome_compare_propertiesFetch 2 or more OneHome listings and align their facts side-by-side. Each target may supply `listing_id` (preferred) or `url` (a portal URL). Returns the full per-property record (with `extracted_features` populated) per row. Per-target errors are captured per-row — one bad target will not fail the whole call. Calls are concurrent. The raw `description` is omitted from each row by default (`include_description: true` to keep it). The redundant `summary` table is also opt-in via `include_summary: true` — by default only `rows[]` is returned, which already carries every fact.onehome_bulk_getFetch up to 200 OneHome listings in a single call. Returns one structured row per input id (no side-by-side summary table — use `onehome_compare_properties` for that). Each row is either `{ listing_id, status: "ok", property }` on success or `{ listing_id, status, error_kind, retryable, error }` on failure (`status` = `error_kind`: `timeout` / `bridge_down` / `pending` are retryable, `protocol` / `other` are real misses) — one bad id never fails the whole call. Calls fan out concurrently against `ListingById`, capped at 6 in flight to avoid swamping the bridge; transient timeouts are retried once per row before being captured as an error. The whole call is bounded by an overall deadline: any row still unsettled comes back `status: "pending"` with a top-level `pending` count — re-run just those ids. The envelope reports `count` / `ok` / `errored`. `extracted_features` is populated per row automatically. The raw `description` (PublicRemarks) is omitted by default — pass `include_description: true` to keep it. `group_id` defaults to the magic-link session context.onehome_get_schoolsFetch the Local-Logic school data for a coordinate — separate primary and high-school lists, each entry with name, attributes (types/grades/programs/levels), and proximity (walking distance + straight-line distance). Returns an `error` field with HTTP details if the consumer session does not have access (the schools endpoint is sometimes agent-only). lat/lng usually come from `onehome_get_property` (`latitude` / `longitude`).- +9 more on the listing page
Ready-to-paste client configs
Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
Cowork24 MCP
No confirmed install command for Cowork24 MCP yet — follow the setup steps linked from its listing page rather than a guessed package name.
Onehome MCP
{
"mcpServers": {
"onehome-mcp": {
"command": "npx",
"args": [
"-y",
"onehome-mcp"
],
"env": {
"ONEHOME_TOKEN": "YOUR_ONEHOME_TOKEN_HERE",
"ONEHOME_MAGIC_LINK": "YOUR_ONEHOME_MAGIC_LINK_HERE"
}
}
}
}