Skip to main content
Plexara
Product11 min read

203 - Discovery: one search, then fetch

One question reaches every system the agent can see. Results come back grouped by source with a coverage summary, and fetch reads any of them in full.

What you will take away from this lesson

In 202 - Your first day with Plexara, we walked through what platform_info loads and the three-step discover-query-enrich workflow the operating manual prescribes. This lesson zooms in on the first step.

Discovery is one tool. A single search call reaches every system the agent is allowed to see: the data catalog, the business glossary, canonical knowledge pages, your own memory, captured insights, saved assets, uploaded reference material, the prompt library, API endpoints, and the connection list. A companion fetch reads any one of those results back in full. There is no per-backend search tool to choose between, which is exactly the point: the agent does not have to guess where an answer lives before it goes looking.

Learning Objectives

  1. 01Explain why discovery on a Plexara MCP is one universal search tool rather than one search tool per backend.
  2. 02Name the sources a single search query reaches and which of them are shared, visibility-scoped, or private to you.
  3. 03Read a search response: results grouped by source, a coverage summary, and a ranking field that says how the hits were ranked.
  4. 04Use fetch to read a search hit in full, and recognize why a persona granted search without fetch can find things it cannot open.
  5. 05Tell discovery apart from structural catalog reads, and use datahub_browse, get_schema, get_lineage, and get_queries for the second job.
  6. 06Run the short domain warm-up that brings world knowledge into an exploratory session.

One way to discover, whatever the answer turns out to be

A question rarely announces where its answer lives. "How did the Southwest region do last quarter" might be answered by a dataset, by a glossary term that pins down what the company means by "region," by a knowledge page a steward wrote after the last reorganization, or by a note you left yourself three sessions ago. An agent that has to pick a search tool before it starts looking is guessing at that answer before it has any evidence, and a wrong guess costs a round trip and often a wrong answer.

So Plexara does not offer a search tool per backend. It offers one. A single search call fans across every source the caller can reach and reports what it found in each. Where an answer lives becomes something the response tells the agent rather than something the agent had to know in advance.

What one search query reaches, and who can see it

Shared across the deployment

Every caller whose persona reaches the underlying connection sees the same records.

  • Catalog datasets

    Datasets from DataHub with their names, descriptions, tags, and domains. Ranked against a platform-held index of that text first, with DataHub’s own keyword search following as the recall tail for column names and ownership.

  • Governance vocabulary

    Glossary terms, tags, and domains as searchable entities in their own right, not merely as attributes of a dataset. A term hit carries its definition, so "what does net revenue mean here" is answered without a second call.

  • Knowledge pages

    The canonical home for business and domain ontology, searched over the full markdown body rather than a title or summary.

  • Context documents

    Longer-form deployment context. Search is the only MCP path that surfaces them, and fetch is the only path that reads the body.

  • Prompts

    The prompt library covered in 208, matched by intent rather than by exact handle.

  • API endpoints and connections

    Endpoints aggregated across every API gateway connection, plus the configured connections themselves. Both are in the default corpus, not behind an opt-in.

Visibility-scoped

Reach depends on which scopes the caller belongs to, computed the same way the resource list is.

  • Resources

    Human-uploaded reference material, searched over both its metadata and its extracted file content. Global material reaches every caller, persona material only its members, user material only its owner.

Private to the caller

Scoped server-side to the identity making the call, so a search never surfaces another person’s records.

  • Your memory

    The personal memory covered in 206. Reading memory back is not a separate tool; it arrives as one group in an ordinary search response.

  • Insights and feedback

    Observations you captured that are still awaiting admin review, and your own feedback threads.

  • Assets

    The dashboards, reports, and exports you saved through the asset tools in 205.

A caller with no identity still sees the shared sources and none of the private ones. What a persona is allowed to find and what it is allowed to call are decided by the same rule, so the two can never disagree. See 207 - Governance: personas, access, and audit.

Grouped by source, with a coverage summary

Fanning across a dozen sources creates a problem a flat relevance list makes worse: the largest source wins. A catalog with forty thousand datasets will out-match a knowledge base of two hundred pages on almost any query, and the one page that actually answers the question ends up below the fold behind thirty datasets that merely mention the topic.

Search returns results bucketed by source instead, built from a display budget with a floor per source so every matching source stays visible and a ceiling per source so none of them runs away. Alongside the hits comes a coverage summary: how many records each source matched against how many are being shown. That second number is what keeps the agent honest about what it is looking at.

What a search response actually contains

  • groups

    [{ source: "catalog", hits: [...] }, { source: "knowledge", hits: [...] }, ...]

    Hits arrive bucketed by source rather than flattened into one relevance list. A strong match in the catalog cannot push the one knowledge page that actually answers the question off the bottom of the list.

  • coverage

    [{ source: "catalog", matched: 38, shown: 5 }, { source: "memory", matched: 2, shown: 2 }]

    Per-source matched and shown counts. The agent learns where the answer space lives even when only the top few of each source are displayed, so it knows whether to narrow the query or drill in.

  • ranking

    "hybrid" | "lexical" | "entity"

    Says how these results were ranked. An ordinary text query ranks hybrid, semantic vector comparison combined with lexical matching. A lookup keyed by a URN instead of by text matches the identifier rather than interpreting it, and says so.

  • ref and reference

    reference: "mcp:knowledge_page:412" or "urn:li:dataset:(...)"

    The handle a hit is read back by. Pass it to fetch to get the complete content, or to a scoped tool to drill in.

  • Snippet and score

    text: "Daily sales aggregated by store and region..." score: 0.83

    A hit is a navigational pointer, not the document. The snippet is enough to choose; the full text comes from fetch.

  • withheld and withheld_notice

    withheld: 4, notice names the persona and the remedy

    Records removed by the caller’s connection boundary are counted, not silently dropped. A shortened result set reads as "present, but not yours to see" rather than "does not exist."

The display set is built from a total budget with a floor per source, so every matching source stays visible, and a ceiling per source, so none of them runs away with the list. Unused budget is redistributed to the sources carrying more relevant hits. This is semantic enrichment (102, 201) applied to the discovery step: the response is shaped for a context window, not dumped into one.

The portal Knowledge page on its Knowledge tab with the Catalog sub-tab selected: a row of Tables, Context Docs, Tags, Domains, and Glossary tabs, a connection selector set to primary, a search box for tables by name, description, or tag, and three table cards each showing a qualified name, a one-line description, and tags such as certified, finance, and pii.
The catalog is one of the sources the agent’s search fans across, and the portal lets you browse it directly by source. The Tables, Context Docs, Tags, Domains, and Glossary sub-tabs are the same buckets a grouped search response comes back in, so what you see here is what a per-source floor guarantees stays visible when a query matches it.

How the hits are ranked

Semantic ranking is the feature people expect from a search tool. Every text query gets it: results rank hybrid, a semantic vector comparison combined with lexical matching, which is what lets a question find a dataset description sharing none of its words while an exact table name still lands where you expect it.

The response reports which path produced a result rather than leaving it implied, because not every lookup is a text search. That distinction is what the ranking field is for.

Then fetch reads it in full

A search hit is a pointer, not a document. It carries a title, a short snippet, a relevance score, and a reference. That shape is deliberate: a response that returned every matching record in full would spend the context window on material the agent has not yet decided it wants.

The reference is what turns a pointer into content. Fetch takes one and returns the complete record behind it, whatever kind of record that is. A knowledge page comes back as full markdown, a dataset as its catalog context, a glossary term as its definition and the datasets carrying it, a prompt as the prompt. The scoped readers that used to exist per source collapsed into this one verb.

One verb reads every source: fetch by reference

  • mcp:knowledge_page:<id>

    The full markdown body of a knowledge page.

  • urn:li:document:<id>

    The full body of a context document. No other MCP tool reaches it.

  • urn:li:dataset:<id>

    The dataset’s catalog context.

  • urn:li:glossaryTerm | tag | domain:<id>

    The name and definition, plus the datasets that carry it.

  • mcp:resource:<id>

    The resource record, with contents inline for a text file at or under 1 MB.

  • mcp:asset:<id>

    The asset’s metadata record. The blob itself stays in S3.

  • mcp:prompt:<id>

    The full prompt.

  • mcp:memory:<id> and mcp:insight:<id>

    Your full memory or insight record.

  • mcp:connection:(kind,name)

    The connection descriptor.

Fetch reads under exactly the scope search applied, so it never returns content the same caller could not have found. A stale or out-of-scope reference comes back as a structured not-found rather than a tool error, which is why a citation pointing at something that has since been deleted degrades into a normal answer instead of a broken session.

The two are a pair, and a persona should hold both

Because the tools are separately grantable, it is possible to configure a persona that can search and cannot fetch. It is worth knowing what that looks like from the user side, because the symptom does not point at the cause.

Why discovery precedes querying

The operating manual that platform_info loads tells the agent to search before writing any query against the data, and usually to pull curated query templates for whatever dataset it settles on. This is not a style preference. It is how the agent avoids inventing schemas, misreading column names, or picking the wrong definition of a metric. This is the difference between searching the capability instead of the manual: the agent finds what exists before it acts.

The two-minute domain warm-up

Even with a thorough catalog and a well-tended knowledge base, exploratory sessions benefit from a short domain warm-up at the start. Giving the agent a moment to describe the data estate in its own words activates the relevant slice of its training-time world knowledge and surfaces any obvious gaps before you ask a question that depends on them.

What the platform returns is thorough, but it covers only what somebody documented. Obvious-to-humans context (a retailer sells physical goods through stores, a bank charges fees across customer accounts, a SaaS vendor tracks monthly recurring revenue) is not written down anywhere unless it was written down on purpose. A short warm-up closes that gap.

Glossary terms are how business language gets resolved

The governance vocabulary deserves its own note, because it changed shape. A glossary term, a tag, and a domain used to exist only as attributes hanging off a dataset: asking what a business term meant returned the datasets tagged with it and never the term itself. They are now searchable and fetchable entities in their own right, which means the question "what does this word mean here" finally has a direct answer.

Discovery and structural reads are different jobs

Search answers "what is there about this." It does not enumerate, and it does not walk a graph. Once the agent knows which dataset it wants, the questions turn structural: what columns does it have, what feeds it, what consumes it, what queries have already been written against it. Those go to the catalog directly.

The distinction is worth holding onto because it explains why the DataHub toolkit did not shrink when discovery moved out of it. Relevance ranking and structured navigation are not two implementations of the same idea.

The catalog is still reachable directly, for a different job

  • datahub_browse

    Enumeration, not relevance. Use it to page through a known category rather than to answer a question.

    Catalog contents listed by category: tags, domains, or data products.

  • datahub_get_schema

    Before writing any query that references specific columns by name.

    Column names, types, nullability, descriptions, tags, and glossary-term bindings for one dataset.

  • datahub_get_queries

    Prefer these over free-form SQL. They are faster, tested, and usually correct.

    Curated, pre-benchmarked query templates stored against a dataset, annotated with performance characteristics.

  • datahub_get_lineage

    When a number looks off and the question becomes "where does this value actually come from."

    Upstream and downstream relationships: which sources feed a dataset, which reports and dashboards consume it.

  • datahub_get_entity

    When you already hold a URN and want the record behind it outside a search flow.

    The full canonical catalog record for one entity, identified by URN.

The DataHub toolkit also carries write operations (datahub_create, datahub_update, datahub_delete) that administrators and knowledge curators use. Those sit next to the read tools above and are governed separately.

When one search is enough on its own

Not every session needs a domain warm-up, and not every question needs a fetch. Narrow, specific questions with clear entity references ("daily revenue by region for 2025") carry enough context in the question itself that the snippets in a single search response fill in the rest. The warm-up pays off most for new users, cross-domain questions, and anything where you are not already sure which dataset you want.

Where this leads

With the right dataset identified and a curated query template in hand, the agent is ready to run the query. The next lesson covers how Plexara reaches data through Trino and why picking the right query shape matters so much for performance.

Key terms

Eight terms cover the vocabulary you will see across search responses, catalog documentation, and every conversation about the discover step.

Key Terms

search
The universal discovery entry point. One query fans across every source the caller can reach and returns hits grouped by source with a coverage summary, rather than a single flat list one source can dominate.
fetch
The companion read verb. Takes any reference search emitted and returns that record in full, under exactly the scope search applied. Replaces the per-source readers that used to exist for each kind of record.
Reference
The handle a search hit carries. Either urn:li:... for DataHub catalog entities or mcp:... for platform-internal records. What you pass to fetch.
Coverage summary
The matched-versus-shown counts a search response carries per source. Tells the agent how much of the answer space it is looking at, so a truncated view is never mistaken for the whole one.
Hybrid ranking
Semantic vector comparison combined with lexical matching. How every text query is ranked, which is what lets a question match a description sharing none of its words. The response reports the path it used in its ranking field.
Glossary term
A named business concept with a formal definition and bindings to the datasets and columns implementing it. Searchable and fetchable in its own right, not only as an attribute of a dataset.
Lineage
Upstream and downstream relationships for a dataset. Answers where a value comes from and which reports would break if the dataset changed. A structural read, not a discovery one.
Curated query template
A pre-benchmarked, annotated query stored against a dataset in DataHub and retrieved with datahub_get_queries. Preferred over free-form SQL because it is tested, fast, and already knows the right aggregation patterns.