Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
A property inquiry agent of this kind takes a renter’s question, looks up listings and policy text, drafts a reply with citations, and opens a hand-off ticket when a person has to act. The TypeScript project described by Luka Engels in his article of 29 September 2026 does this with a React front end, a server-side model loop, and tools exposed through the Model Context Protocol (MCP). Its retrieval combines keyword search with local embeddings and a reranker, which is what “hybrid RAG” means here. The author presents it as a local application on synthetic data, not a finished agency operations system, and the sections below separate what the design does from what its own tests do and do not show. The primary source is the author’s article.
How a question moves through the system
The React inquiry desk sends the customer’s question to a server-side agent loop. Each turn runs in the same order:
- The conversational model reads the question and decides which tools to call.
- An MCP client connected to the project’s own MCP server executes those calls.
- The model drafts an answer from the tool results.
- The loop checks the draft before anything is returned.
- The response carries the reply, citations, any hand-off tickets, a tool trace, and usage information.
The same agent is also reachable through a command-line interface and an HTTP API, according to the article. Because the trace is part of the response, a reader or developer can see which tool produced which claim.
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallThe four built-in tools
The MCP server exposes four tools. General policy pages are not a tool; the article says they are available as MCP resources.
#1 Best Overall
| Tool | Purpose | Role in the example inquiry |
|---|---|---|
search_listings |
Applies explicit listing requirements such as city, price, and room count to typed catalogue fields | “Flat in Hamburg under €2,000” |
get_listing |
Returns one complete listing record | Opening the listing a citation points to |
search_knowledge |
Returns text passages through hybrid retrieval | “Is heating included?” |
hand_off_to_human |
Creates a ticket for an inquiry that needs a person | “Can I view it on Saturday?” |
The article’s example inquiry combines all four kinds of need in one message: “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?” It is a useful test because the answer requires a filter, a policy lookup, a property fact, and a human decision, and the agent has to keep them apart.
Why filtering and text retrieval are separate
The project treats two kinds of question differently. Explicit requirements go to typed fields, where a price ceiling or room count can be compared exactly. Descriptive questions go to text retrieval. The article presents this split as an implementation choice made for this corpus, not as proof that it suits every property dataset.
Structured filtering
For city, price, and room count, search_listings filters the catalogue directly. A number in a listing is either inside the requested bound or it is not, so there is no similarity score to interpret.
Hybrid retrieval for text
Questions such as whether heating is included are answered from passages. The pipeline works in two stages:
Rank #2
- Candidate generation: BM25 keyword search and local embedding search each produce candidate passages. The embedding model named in the article is
multilingual-e5-small. - Reranking: a local reranker scores each question-passage pair. The article names
bge-reranker-v2-m3.
The local retrieval models run through Transformers.js after their initial download. The conversational model is separate and can be served by the Anthropic API or Amazon Bedrock; both adapters are documented in the article. Hybrid retrieval only helps when the right passage reaches one of the two candidate lists, a limit that matters in the evaluation results below.
Headers in passages: a tested trade-off
The author ran a small experiment on whether section headers should be embedded with each passage. The expected passage appeared in the top five vector results in the following counts:
| Passage representation | Expected passage in top five vector results |
|---|---|
| Headers included | 20 of 25 |
| Passage text only | 23 of 25 |
The article reports that passage-only embeddings performed better in this experiment, so the vector side was changed accordingly. Headers were kept for keyword search and as context for the reranker, where they still help. This is a result from one small test set, not a general rule about embeddings.
Why a simple similarity cutoff was dropped
The author also found that a fixed similarity threshold could not separate answerable from unanswerable questions. An unanswerable question about a gym scored 0.832, while an answerable German question about pets scored 0.784. A cutoff set at 0.80 would keep the gym question and drop the pet question, which is why the project does not rely on score thresholds alone. Both scores come from the author’s example embedding run.
Rank #3
Evidence the interface exposes
The interface shows the reply, the tool calls, the citations, and any human hand-offs. Clicking a citation opens the cited source passage or the listing record it refers to. This is the main way a reader can check a claim without trusting the model’s prose. It does not, by itself, confirm that a cited passage supports the sentence it is attached to; the section on answer checks covers that gap.
Recorded results and what they cover
The author reports the following figures from the project’s own test set. The set is small and synthetic, so the numbers describe this corpus and this device rather than real agency traffic.
| Measure | Result | Context |
|---|---|---|
| Answerable questions with the expected passage in the top five | 24 of 25 | Project-recorded retrieval evaluation, 28 September 2026, 33-question set |
| Unanswerable questions that returned passages | 0 of 8 | Same evaluation and set |
| Average time per question | About 1.4 seconds | Same set, on a laptop CPU |
The one answerable miss was a German question asking whether a tenant must pay commission. Neither the keyword search nor the embedding search collected the relevant passage, so the reranker never saw it and could not recover it. That is a candidate-retrieval failure, and it is the kind of error that a larger corpus is likely to expose more often.
Free tools Windows power users keep installed
One-click scans. No signup required.
The author is explicit about what these figures are not. They are not an independent benchmark, not a measure of final-answer accuracy, and not evidence that the assistant never invents facts. They are retrieval numbers from a narrow project test.
Rank #4
Answer checks: what they catch and what they miss
Before a reply is returned, the built-in loop applies three checks:
- Citation markers must match listing or passage IDs that were returned during the current run.
- Detected prices, areas, and percentages must match values in allowed tool results or in the user’s inquiry.
- Empty replies are rejected.
When a check fails, the model gets one repair attempt. If the second draft also fails, code creates a hand-off ticket and returns a fixed reply.
These checks confirm that a cited ID or a number appeared in an allowed source. They do not confirm that the sentence around it reads the source correctly. The author identifies three specific blind spots:
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problems- A real number attached to the wrong property can pass the numerical check.
- Non-numerical claims can lack citations without triggering any guard.
- The built-in checks do not apply to an outside assistant that calls the
/mcpendpoint directly.
Hand-off tickets: what they do and do not do
A hand-off is a record, not a completed action. Creating a ticket does not send an email to the agency and does not reserve a viewing slot, so the Saturday viewing request in the example still needs a person to act on it. Tickets are held in memory and disappear when the process stops. Anyone building on this pattern needs a persistent queue and a delivery step before a hand-off can be relied on operationally.
Best Value
Loop limits
The article documents the following defaults. They are project settings described at the time of writing and may change.
| Limit | Default described in the article |
|---|---|
| Model calls per inquiry | Up to 8 |
| Token budget | 80,000 tokens, checked between model calls |
| Model-call timeout | 60 seconds |
| Tool-call timeout | 30 seconds |
Running it locally: prerequisites and defaults
- Runtime: Node.js 20 or newer, with
corepackandpnpm, as in the documented setup. - Without a model key: the browser demo falls back to a rule-based demo model.
- Model downloads: retrieval models may still download on first use unless the hashing embedder is selected.
- Server address: the default is
127.0.0.1:3000. The server has no authentication, so it should not be exposed beyond the local machine. - Data: property and policy records are synthetic. Ticket queue and vector store are in memory, and the embeddings are cached on disk.
Project status
The author describes the project as work in progress and states the gap 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.” Persistent storage and continuous integration are listed as planned, not complete. The author’s tests cover scripted-model failure paths and browser flows for the visible workflow; they are not presented as broad reliability evidence. Prompt-injection cases are also named as part of the evaluation still required.
How to evaluate a similar system
The article describes one project, so it offers no comparison with other products. For an engineering review of any similar agent, the article’s own design points suggest these axes:
- Data path: whether explicit requirements are filtered on typed fields or retrieved from text.
- Retrieval evaluation: top-k recall on answerable questions, abstention on unanswerable ones, and latency, each stated with the corpus and device used.
- Evidence controls: whether citations and numbers are checked, and whether a sentence’s support in its source is evaluated separately.
- Human escalation: whether a ticket is only created or is delivered and tracked through a persistent workflow.
- Operational readiness: authentication, persistent storage, a broader evaluation suite, and how external MCP clients are governed.
A system that scores well on the first three axes can still fail on the last two, and the project described here is explicit that it does.
Quick Recap
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.

