October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsPC HealthRecommendedCrashes, freezes, slowdowns? Check your PC nowSpot repairable issues before they interrupt work.Check PCOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
World desk7 min

A Property Inquiry Agent with React, MCP, and Hybrid RAG

A TypeScript property inquiry agent that filters typed listing data, retrieves cited policy text with hybrid search, checks its answers, and hands unresolved requests to a person. Here is how it works and where its evidence stops.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A property inquiry agent answers a renter’s question from listing records and policy text, shows the evidence behind each reply, and passes anything it cannot settle to a person. Luka Engels’s TypeScript project, described in his article of 29 September 2026, does exactly that, but it is a local prototype built on synthetic data, not a finished agency system. This guide explains how the pieces fit together, which parts of the design are verified by his own tests, and where the checks stop.

How a single inquiry moves through the system

The architecture is a chain of five stages. Each stage has a narrow job, and each one leaves a trace that the interface can display.

As an Amazon Associate I earn from qualifying purchases.

  1. The React inquiry desk sends the customer’s question to a server-side agent loop.
  2. The agent loop asks a conversational model which tools to call. The model decides; the loop does not guess.
  3. An MCP client executes the requested calls against the project’s own MCP server.
  4. The model drafts an answer, and the loop runs its answer checks before anything reaches the customer.
  5. The response returns the reply, citations, any hand-off tickets, a tool trace, and usage information.

The project also exposes a command-line interface and an HTTP API, so the same loop can be driven without the browser demo.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The four MCP tools and the policy resources

The server offers four built-in tools, each with a distinct purpose:

  • search_listings applies explicit listing requirements such as city, price, and room count.
  • get_listing returns one complete property record.
  • search_knowledge searches text passages drawn from property descriptions and policy documents.
  • hand_off_to_human creates a ticket for an inquiry that needs a person.

General policy pages are also exposed as MCP resources, so a client can read them directly rather than through a search call.

How a question is routed

The central design decision is that structured requirements and descriptive text are handled by different mechanisms. The author describes this as an implementation choice for this project, not as a proof that the split is best for every property corpus.

Kind of question Path in the project Example from the article
Explicit listing requirements Direct filtering of typed catalogue fields via search_listings A flat in Hamburg under €2,000
Descriptive or policy text Hybrid retrieval: BM25 keyword search and local embedding search generate candidates, then a local reranker scores each question-passage pair Whether heating is included
Work requiring a person Hand-off ticket via hand_off_to_human Booking a viewing on Saturday

Typed filters for hard requirements

When a customer states a limit, such as a maximum price or a city, the system filters the typed fields in the catalogue. This avoids asking a language model to judge whether 1,990 is below 2,000. The benefit is that a numeric requirement is applied the same way every time, and the result can be checked against the record.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Hybrid retrieval for text

Questions about descriptions and policies, such as whether heating is included or whether pets are allowed, are answered from passages. The project uses two candidate searches:

  • BM25 keyword search, which matches the words in the question.
  • Local embedding search using multilingual-e5-small, which matches meaning across phrasing.

The candidates are then scored by a local reranker, bge-reranker-v2-m3, which reads each question-passage pair together. The retrieval models run locally through Transformers.js after their initial download. The conversational model is separate from this layer and can be an Anthropic API model or an Amazon Bedrock model.

Walking through the example inquiry

The article’s example asks: “I’m looking for a flat in Hamburg under €2,000. I have a dog. Is heating included, and can I view it on Saturday?” One message contains four different kinds of work. The city and price are explicit requirements for typed filtering. The heating and pet questions are text questions answered through retrieval, with citations pointing to the passage used. The Saturday viewing is a request the system cannot complete itself, so it belongs in the hand-off path. A well-behaved reply therefore combines a filtered result, cited text answers, and a ticket for the viewing, while stating clearly that the viewing has not been booked.

Hand-off tickets are records, not bookings

  • Creating a ticket does not send an email to the agency.
  • It does not reserve a viewing slot.
  • Tickets are held in memory, so they disappear when the process stops.

Anyone building on this design should treat the ticket as a log entry that a person must still act on, and should add a durable store and a delivery step before relying on it operationally.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What the interface exposes

The interface is built to make the agent’s work inspectable. A reply appears with its tool calls, its citations, and any hand-offs. Clicking a citation opens the cited passage or the listing record it came from. This is the main way a reader can check a claim without trusting the model’s wording.

Answer checks and where they stop

Before a reply is returned, the built-in loop applies three checks:

  • Every citation marker must match a listing or passage ID returned during the current run.
  • Detected prices, areas, and percentages must match values in an allowed tool result or in the customer’s own inquiry.
  • Empty replies are rejected.

If a check fails, the model receives one repair opportunity. If the second attempt also fails, the code creates a hand-off ticket and returns a fixed reply.

These checks confirm that a citation or number appeared in an allowed result. They do not confirm that the sentence around it interprets the evidence correctly. The author identifies three specific gaps:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • A real number attached to the wrong property can still pass the numeric check.
  • Non-numerical claims may lack citations without triggering the numeric guard.
  • The built-in checks do not automatically apply when an external assistant calls the /mcp endpoint directly.

The recorded figures and what they measure

The project’s tests use a 33-question set: 25 answerable and 8 unanswerable questions, all on a small synthetic corpus. The author states that these results are not an independent benchmark, not a final-answer accuracy measure, and not proof that the assistant never invents facts.

Figure What was measured Conditions and source
24 of 25 answerable questions The expected passage appeared among the top five retrieval results Project-recorded retrieval evaluation, Luka Engels, 28 September 2026
0 of 8 unanswerable questions Returned any passage Same evaluation; abstention test on the same corpus
About 1.4 seconds per question Average latency across the 33-question set Laptop CPU, same evaluation; not a hardware-independent figure
20 of 25 with headers, 23 of 25 without Expected passage in the top five vector results Small recorded experiment in the author’s article; passage-only embeddings performed better, while headers were kept for keyword search and reranking context
0.832 and 0.784 Embedding similarity for an unanswerable gym question and an answerable German pet question Example pair from the author’s article; used to explain why a fixed similarity cutoff was unreliable in that experiment

The one answerable miss is instructive. A German question asking whether a tenant must pay commission did not get its passage into the top five. Neither the keyword search nor the embedding search collected the relevant passage, so the reranker had nothing to rescore. This is a candidate-retrieval failure in this corpus, and the author does not present it as an estimate of performance on real agency inquiries.

Loop limits and default budgets

The agent loop is bounded by default settings described in the author’s 29 September 2026 article. They may change as the implementation evolves.

  • Up to 8 model calls per inquiry.
  • An 80,000-token budget, checked between model calls.
  • A 60-second timeout on each model call.
  • A 30-second timeout on each tool call.

Setting up and running the demo

  • Prerequisites: Node.js 20 or newer, corepack, and pnpm, as documented in the author’s article.
  • Without an API key: the browser demo can fall back to a rule-based demo model.
  • Model downloads: the retrieval models may still download on first use unless the hashing embedder is selected.
  • Hosted models: the article documents an Anthropic API adapter and an Amazon Bedrock adapter. Current vendor availability and pricing were not verified for this article.
  • Default address: the server listens on 127.0.0.1:3000 and, according to the article, has no authentication. It should be run locally only.
  • Storage: the ticket queue and the vector store are in memory. Vector embeddings are cached on disk.

The author characterises the project as a local application with synthetic data, not a complete agency operations system.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

What remains unfinished

The author states plainly: “This is still a work in progress: a broader evaluation suite is next, to measure answer correctness and missed hand-offs beyond the existing tests.” The tests that exist cover retrieval on the small corpus, scripted-model tests of failure paths, and browser tests of the visible workflow. A broader evaluation of answer correctness, preserved qualifications, missed hand-offs, and prompt-injection cases is still needed. Persistent storage and continuous integration are listed as planned rather than completed.

How to evaluate a similar system

Because the source describes a single project rather than a set of comparable products, the most useful comparison is against the following axes:

  • Data path: whether hard requirements go through typed-field filtering or through retrieval over descriptive text.
  • Retrieval evaluation: top-k recall for answerable questions, abstention on unanswerable ones, and latency, each stated with its corpus size and device.
  • Evidence controls: whether citations and numbers are checked, and whether a sentence’s support in its source is evaluated separately.
  • Human escalation: whether a system only creates a ticket, or delivers and tracks the request through a persistent workflow.
  • Operational readiness: authentication, persistent storage, a broader evaluation suite, and how external MCP clients are handled.

Primary details are in Luka Engels’s article on the project.

The Bottom Line

The design is worth studying as an engineering pattern: keep hard requirements in typed filters, retrieve text with cited passages, check the evidence the model uses, and send unresolved work to a visible ticket. Its own tests are small and narrow, and they do not show that the answers are correct or that every hand-off is caught. Treat it as a well-instrumented prototype, not a production property-search service.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
PC Slower Than It Used to Be?Free scan - under a minute
Crashes, No Sound, or Screen Glitches?Free driver scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.