@burdenoff/mcp-libs 2026.1028.1 → 2026.1030.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -449,6 +449,30 @@ var HEALTH = `
449
449
  cosHealth
450
450
  }
451
451
  `;
452
+ var SEMANTIC_SEARCH = `
453
+ query CosmicintersectionSemanticSearch($input: CosSemanticSearchInput!) {
454
+ cosSemanticSearch(input: $input) {
455
+ query
456
+ interpretedTerms
457
+ expandedTerms
458
+ timeWindow { fromYear toYear }
459
+ total
460
+ hits {
461
+ entityType
462
+ id
463
+ title
464
+ snippet
465
+ score
466
+ dataset { id name accessLevel status format coverage version sourceId collectionId }
467
+ collection { id name slug }
468
+ release { id title version status doi }
469
+ notebook { id title status }
470
+ evidence { kind entityId label text }
471
+ lineage { kind id label relation status detail parentId occurredAt }
472
+ }
473
+ }
474
+ }
475
+ `;
452
476
  var CosSourceTypeEnum = zod.z.enum([
453
477
  "API",
454
478
  "ARCHIVE",
@@ -1688,6 +1712,33 @@ function registerHealthTools(server, ctx, track) {
1688
1712
  }
1689
1713
  );
1690
1714
  }
1715
+ var CosSearchEntityTypeEnum = zod.z.enum(["DATASET", "COLLECTION", "RELEASE", "NOTEBOOK"]);
1716
+ function registerSearchTools(server, ctx, track) {
1717
+ server.registerTool(
1718
+ track(mcpToolName(ctx.productName, "search")),
1719
+ {
1720
+ title: "Search the Catalog",
1721
+ description: 'Natural-language search across the CosmicIntersection catalog: datasets (name, description, coverage, instrument metadata), schema fields (name, unit, provenance note), sources, collections, analyses, releases and notebooks. Returns ranked hits with matched evidence and, for datasets, lineage (source -> pipeline runs/steps -> analyses -> releases). Example query: "calibrated flux columns covering M31 between 2019 and 2021". Use this first to locate data instead of paging through datasets_list.',
1722
+ inputSchema: {
1723
+ query: zod.z.string().min(1).max(500).describe("Plain-language question (instrument, target, epoch, quantity, method, ...)"),
1724
+ entityTypes: zod.z.array(CosSearchEntityTypeEnum).optional().describe("Restrict to these entity types (default: all)"),
1725
+ limit: zod.z.number().int().min(1).max(50).optional().describe("Maximum hits (default 20)"),
1726
+ includeLineage: zod.z.boolean().optional().describe("Attach lineage to dataset hits (default true)")
1727
+ }
1728
+ },
1729
+ async ({ query, entityTypes, limit, includeLineage }) => {
1730
+ try {
1731
+ const data = await ctx.gql.workspace.request(SEMANTIC_SEARCH, { input: { query, entityTypes, limit, includeLineage } });
1732
+ return jsonResult(data.cosSemanticSearch);
1733
+ } catch (error) {
1734
+ ctx.logger.error("cosmicintersection search failed", { error: String(error) });
1735
+ return errorResult(
1736
+ `Failed to search the catalog: ${error instanceof Error ? error.message : String(error)}`
1737
+ );
1738
+ }
1739
+ }
1740
+ );
1741
+ }
1691
1742
 
1692
1743
  // src/modules/cosmicintersection/resources.ts
1693
1744
  function registerCosmicintersectionResources(server, ctx, track) {
@@ -1973,6 +2024,7 @@ var cosmicintersectionModule = {
1973
2024
  registerReleaseTools(server, ctx, trackTool);
1974
2025
  registerGrantTools(server, ctx, trackTool);
1975
2026
  registerHealthTools(server, ctx, trackTool);
2027
+ registerSearchTools(server, ctx, trackTool);
1976
2028
  registerCosmicintersectionResources(server, ctx, trackResource);
1977
2029
  registerCosmicintersectionPrompts(server, ctx, trackPrompt);
1978
2030
  return { tools, resources, prompts };