ktx/packages/context/src/scan/index.ts
Andrey Avtomonov b759a4a286
feat(mcp):added MCP server (#97)
* docs(specs): design research-agent MCP tools and ktx mcp daemon

Adds the 2026-05-14 design spec for exposing four new MCP tools
(discover_data, entity_details, dictionary_search, sql_execution),
shipping a ktx-research skill, and introducing an HTTP-only ktx mcp
daemon so external agents can use KTX as a research-capable context
layer.

* Refine research-agent MCP tools spec after adversarial review iteration 1

* Refine research-agent MCP tools spec after adversarial review iteration 2

* Refine research-agent MCP tools spec after adversarial review iteration 3

* Refine spec: drop connectionName compat carve-out and ground summary/snippet provenance per kind

* feat(daemon): validate read-only SQL with sqlglot

* feat(context): expose read-only SQL validation port

* feat(context): register MCP sql execution tool

* feat(context): execute MCP SQL through validated connector path

* test(context): update SQL analysis port fixtures

* docs: add research-agent MCP sql execution foundation plan

* feat(context): add scan-backed entity details service

* feat(context): register MCP entity details tool

* feat(context): expose local MCP entity details

* test(context): align entity details scan fixtures

* docs: add research-agent MCP entity_details plan

* feat(context): add dictionary search service

* feat(context): register MCP dictionary search tool

* feat(context): expose local MCP dictionary search

* docs: add research-agent MCP dictionary_search plan

* feat: add MCP discover data service

* feat: expose discover data MCP tool

* feat: wire local discover data MCP port

* docs: add research-agent MCP discover_data plan

* feat(cli): add mcp http security helpers

* feat(cli): host mcp over streamable http

* feat(cli): manage mcp daemon lifecycle

* feat(cli): add ktx mcp commands

* fix(cli): stabilize mcp daemon verification

* docs: add research-agent MCP http daemon plan

* feat(cli): install KTX research skill

* feat(cli): configure MCP clients in setup agents

* feat(cli): support Claude local MCP setup scope

* docs: add research-agent MCP setup-agents plan

* refactor(context): use connectionId in warehouse verification tools

* docs(context): update ingest verification prompts for connectionId

* docs: add research-agent MCP ingest contract convergence plan

* chore: build runtime artifacts in conductor setup

---------

Co-authored-by: Andrey Avtomonov <7889985+andreybavt@users.noreply.github.com>
2026-05-15 02:35:09 +02:00

419 lines
14 KiB
TypeScript

export {
REDACTED_KTX_CREDENTIAL_VALUE,
redactKtxCredentialEnvelope,
redactKtxCredentialValue,
redactKtxScanMetadata,
redactKtxScanReport,
redactKtxScanWarning,
} from './credentials.js';
export type {
KtxDataDictionaryColumnState,
KtxDataDictionarySampleDecision,
KtxDataDictionarySettings,
KtxDataDictionarySkipReason,
} from './data-dictionary.js';
export {
defaultKtxDataDictionarySettings,
isKtxDataDictionaryCandidate,
shouldKtxSampleColumnForDictionary,
} from './data-dictionary.js';
export type {
KtxColumnAnalysisResult,
KtxColumnDescriptionPromptInput,
KtxDataSourceDescriptionPromptInput,
KtxDescriptionCachePort,
KtxDescriptionColumn,
KtxDescriptionColumnTable,
KtxDescriptionGenerationSettings,
KtxDescriptionGeneratorOptions,
KtxDescriptionSamplingPort,
KtxDescriptionTableInput,
KtxGenerateColumnDescriptionsInput,
KtxGenerateDataSourceDescriptionInput,
KtxGenerateTableDescriptionInput,
KtxTableDescriptionPromptInput,
} from './description-generation.js';
export {
buildKtxColumnDescriptionPrompt,
buildKtxDataSourceDescriptionPrompt,
buildKtxTableDescriptionPrompt,
KtxDescriptionGenerator,
} from './description-generation.js';
export type { KtxColumnEmbeddingForeignKeys, KtxColumnEmbeddingTextInput } from './embedding-text.js';
export { buildKtxColumnEmbeddingText } from './embedding-text.js';
export type {
ComputeKtxScanEnrichmentInputHashInput,
KtxScanEnrichmentCompletedStage,
KtxScanEnrichmentFailedStage,
KtxScanEnrichmentStageLookup,
KtxScanEnrichmentStageRecord,
KtxScanEnrichmentStateStore,
} from './enrichment-state.js';
export {
completedKtxScanEnrichmentStateSummary,
computeKtxScanEnrichmentInputHash,
KTX_SCAN_ENRICHMENT_STAGES,
summarizeKtxScanEnrichmentState,
} from './enrichment-state.js';
export {
failedKtxScanEnrichmentSummary,
ktxScanErrorMessage,
skippedKtxScanEnrichmentSummary,
} from './enrichment-summary.js';
export type {
KtxEntityDetailsColumn,
KtxEntityDetailsErrorCode,
KtxEntityDetailsErrorResult,
KtxEntityDetailsInput,
KtxEntityDetailsRecord,
KtxEntityDetailsResponse,
KtxEntityDetailsSnapshotInfo,
KtxEntityDetailsTableInput,
} from './entity-details.js';
export { createKtxEntityDetailsService } from './entity-details.js';
export type {
DisplayTargetResolution,
RawSchemaHit,
TableDetail,
WarehouseCatalogServiceDeps,
} from './warehouse-catalog.js';
export { WarehouseCatalogService } from './warehouse-catalog.js';
export type {
KtxColumnSampleUpdate,
KtxDescriptionSource,
KtxDescriptionUpdate,
KtxEmbeddingUpdate,
KtxEnrichedColumn,
KtxEnrichedRelationship,
KtxEnrichedSchema,
KtxEnrichedTable,
KtxRelationshipEndpoint,
KtxRelationshipSource,
KtxRelationshipType,
KtxRelationshipUpdate,
KtxScanMetadataStore,
KtxSkippedRelationship,
KtxStructuralSyncPlan,
} from './enrichment-types.js';
export type {
DeterministicLocalScanEnrichmentProviderOptions,
KtxLocalScanEnrichmentInput,
KtxLocalScanEnrichmentProviders,
KtxLocalScanEnrichmentResult,
} from './local-enrichment.js';
export {
createDeterministicLocalScanEnrichmentProviders,
runLocalScanEnrichment,
snapshotToKtxEnrichedSchema,
} from './local-enrichment.js';
export type {
WriteLocalScanEnrichmentArtifactsInput,
WriteLocalScanEnrichmentArtifactsResult,
WriteLocalScanManifestShardsInput,
WriteLocalScanManifestShardsResult,
} from './local-enrichment-artifacts.js';
export {
writeLocalScanEnrichmentArtifacts,
writeLocalScanManifestShards,
} from './local-enrichment-artifacts.js';
export type {
LocalScanMcpOptions,
LocalScanRunResult,
LocalScanStatusResponse,
RunLocalScanOptions,
} from './local-scan.js';
export { filterSnapshotTables, getLocalScanReport, getLocalScanStatus, resolveEnabledTables, runLocalScan } from './local-scan.js';
export type { ReadLocalScanStructuralSnapshotInput } from './local-structural-artifacts.js';
export { readLocalScanStructuralSnapshot } from './local-structural-artifacts.js';
export type {
KtxEnrichmentScanPhaseResult,
KtxScanOrchestratorOptions,
KtxScanOrchestratorRunInput,
KtxScanOrchestratorRunResult,
KtxStructuralScanPhaseResult,
} from './orchestrator.js';
export { KtxScanOrchestrator } from './orchestrator.js';
export type {
KtxRelationshipArtifactStatus,
ReadLocalScanRelationshipArtifactsResult,
} from './relationship-artifacts.js';
export { readLocalScanRelationshipArtifacts } from './relationship-artifacts.js';
export type {
KtxRelationshipBenchmarkReport,
KtxRelationshipBenchmarkReportCase,
KtxRelationshipBenchmarkReportCaseStatus,
} from './relationship-benchmark-report.js';
export {
buildKtxRelationshipBenchmarkReport,
formatKtxRelationshipBenchmarkReportMarkdown,
} from './relationship-benchmark-report.js';
export type {
KtxRelationshipBenchmarkCaseResult,
KtxRelationshipBenchmarkDetectedLink,
KtxRelationshipBenchmarkDetectedPk,
KtxRelationshipBenchmarkDetector,
KtxRelationshipBenchmarkDetectorInput,
KtxRelationshipBenchmarkDetectorResult,
KtxRelationshipBenchmarkExpectedLink,
KtxRelationshipBenchmarkExpectedLinks,
KtxRelationshipBenchmarkExpectedPk,
KtxRelationshipBenchmarkFixture,
KtxRelationshipBenchmarkMetrics,
KtxRelationshipBenchmarkMode,
KtxRelationshipBenchmarkStatus,
KtxRelationshipBenchmarkSuiteResult,
KtxRelationshipBenchmarkTier,
} from './relationship-benchmarks.js';
export {
currentKtxRelationshipBenchmarkDetector,
ktxRelationshipBenchmarkDetectorWithLlm,
KTX_RELATIONSHIP_BENCHMARK_MODES,
KTX_RELATIONSHIP_BENCHMARK_TIERS,
loadKtxRelationshipBenchmarkFixture,
loadKtxRelationshipBenchmarkFixtures,
maskKtxRelationshipBenchmarkSnapshot,
runKtxRelationshipBenchmarkCase,
runKtxRelationshipBenchmarkSuite,
} from './relationship-benchmarks.js';
export type {
ApplyKtxRelationshipValidationBudgetInput,
KtxRelationshipBudgetedCandidate,
KtxRelationshipValidationBudget,
KtxRelationshipValidationBudgetResult,
} from './relationship-budget.js';
export {
applyKtxRelationshipValidationBudget,
defaultKtxRelationshipValidationBudget,
} from './relationship-budget.js';
export type {
KtxRelationshipDiscoveryCandidate,
KtxRelationshipDiscoveryCandidateEvidence,
KtxRelationshipDiscoveryCandidateOptions,
KtxRelationshipDiscoveryCandidateSource,
KtxRelationshipDiscoveryCandidateStatus,
KtxRelationshipInferredTargetPk,
} from './relationship-candidates.js';
export {
generateKtxRelationshipDiscoveryCandidates,
inferKtxRelationshipTargetPks,
mergeKtxRelationshipDiscoveryCandidates,
} from './relationship-candidates.js';
export type {
DiscoverKtxCompositeRelationshipsInput,
DiscoverKtxCompositeRelationshipsResult,
KtxCompositePrimaryKeyCandidate,
KtxCompositeRelationshipCandidate,
KtxCompositeRelationshipStatus,
KtxCompositeRelationshipTupleEndpoint,
KtxCompositeRelationshipValidationEvidence,
} from './relationship-composite-candidates.js';
export { discoverKtxCompositeRelationships } from './relationship-composite-candidates.js';
export type {
BuildKtxRelationshipArtifactsInput,
BuildKtxRelationshipDiagnosticsInput,
EmptyKtxRelationshipProfileArtifactInput,
KtxRelationshipArtifact,
KtxRelationshipArtifactEdge,
KtxRelationshipArtifactEndpoint,
KtxRelationshipDiagnosticsArtifact,
KtxRelationshipDiagnosticsSummary,
KtxRelationshipDiagnosticsThresholds,
KtxRelationshipDiagnosticsValidation,
} from './relationship-diagnostics.js';
export {
buildKtxRelationshipArtifacts,
buildKtxRelationshipDiagnostics,
emptyKtxRelationshipProfileArtifact,
} from './relationship-diagnostics.js';
export type {
BuildKtxRelationshipFeedbackCalibrationReportInput,
CalibrateLocalRelationshipFeedbackLabelsInput,
KtxRelationshipFeedbackCalibrationBucket,
KtxRelationshipFeedbackCalibrationLabel,
KtxRelationshipFeedbackCalibrationReport,
} from './relationship-feedback-calibration.js';
export {
buildKtxRelationshipFeedbackCalibrationReport,
calibrateLocalRelationshipFeedbackLabels,
formatKtxRelationshipFeedbackCalibrationMarkdown,
} from './relationship-feedback-calibration.js';
export type {
ExportLocalRelationshipFeedbackLabelsInput,
ExportLocalRelationshipFeedbackLabelsResult,
KtxRelationshipFeedbackDecisionFilter,
KtxRelationshipFeedbackExportWarning,
KtxRelationshipFeedbackLabel,
} from './relationship-feedback-export.js';
export {
exportLocalRelationshipFeedbackLabels,
formatKtxRelationshipFeedbackLabelsJsonl,
} from './relationship-feedback-export.js';
export {
collectKtxFormalMetadataRelationships,
type KtxFormalMetadataRelationshipCollection,
} from './relationship-formal-metadata.js';
export type {
KtxRelationshipGraphResolutionResult,
KtxRelationshipGraphResolverSettings,
KtxResolvedRelationshipDiscoveryCandidate,
KtxResolvedRelationshipGraphEvidence,
KtxResolvedRelationshipPk,
KtxResolvedRelationshipPkEvidence,
KtxResolvedRelationshipStatus,
ResolveKtxRelationshipGraphInput,
} from './relationship-graph-resolver.js';
export { resolveKtxRelationshipGraph } from './relationship-graph-resolver.js';
export type {
KtxRelationshipLlmProposalGenerateText,
KtxRelationshipLlmProposalResult,
KtxRelationshipLlmProposalSettings,
ProposeKtxRelationshipCandidatesWithLlmInput,
} from './relationship-llm-proposal.js';
export { proposeKtxRelationshipCandidatesWithLlm } from './relationship-llm-proposal.js';
export type {
KtxRelationshipLocalityCandidateTable,
LocalKtxRelationshipCandidateTablesInput,
} from './relationship-locality.js';
export { localCandidateTables } from './relationship-locality.js';
export type {
KtxRelationshipNormalizedName,
KtxRelationshipTokenInput,
} from './relationship-name-similarity.js';
export {
normalizeKtxRelationshipName,
pluralizeKtxRelationshipToken,
singularizeKtxRelationshipToken,
tokenizeKtxRelationshipName,
tokenSimilarity,
} from './relationship-name-similarity.js';
export type {
DiscoverKtxRelationshipsInput,
DiscoverKtxRelationshipsResult,
} from './relationship-discovery.js';
export { discoverKtxRelationships } from './relationship-discovery.js';
export type {
KtxRelationshipColumnProfile,
KtxRelationshipProfileArtifact,
KtxRelationshipReadOnlyExecutor,
KtxRelationshipTableProfile,
ProfileKtxRelationshipSchemaInput,
} from './relationship-profiling.js';
export {
formatKtxRelationshipTableRef,
profileKtxRelationshipSchema,
quoteKtxRelationshipIdentifier,
} from './relationship-profiling.js';
export type {
AppliedRelationshipReviewDecision,
ApplyLocalScanRelationshipReviewDecisionsInput,
ApplyLocalScanRelationshipReviewDecisionsResult,
} from './relationship-review-apply.js';
export { applyLocalScanRelationshipReviewDecisions } from './relationship-review-apply.js';
export type {
KtxRelationshipReviewDecisionArtifact,
KtxRelationshipReviewDecisionEntry,
KtxRelationshipReviewDecisionValue,
WriteLocalScanRelationshipReviewDecisionInput,
WriteLocalScanRelationshipReviewDecisionResult,
} from './relationship-review-decisions.js';
export { writeLocalScanRelationshipReviewDecision } from './relationship-review-decisions.js';
export type {
KtxRelationshipFixtureOrigin,
KtxRelationshipScoreBreakdown,
KtxRelationshipScoreSignal,
KtxRelationshipScoreWeights,
KtxRelationshipScoringCalibrationObservation,
KtxRelationshipSignalVector,
} from './relationship-scoring.js';
export {
calibrateWeightsFromSyntheticFixtures,
defaultKtxRelationshipScoreWeights,
KTX_RELATIONSHIP_SCORE_SIGNAL_KEYS,
normalizeKtxRelationshipScoreWeights,
scoreKtxRelationshipCandidate,
} from './relationship-scoring.js';
export type {
AdviseLocalRelationshipFeedbackThresholdsInput,
BuildKtxRelationshipThresholdAdviceReportInput,
KtxRelationshipThresholdAdviceCandidate,
KtxRelationshipThresholdAdviceReport,
KtxRelationshipThresholdAdviceStatus,
} from './relationship-threshold-advice.js';
export {
adviseLocalRelationshipFeedbackThresholds,
buildKtxRelationshipThresholdAdviceReport,
formatKtxRelationshipThresholdAdviceMarkdown,
} from './relationship-threshold-advice.js';
export type {
KtxRelationshipValidationEvidence,
KtxRelationshipValidationSettings,
KtxValidatedRelationshipDiscoveryCandidate,
KtxValidatedRelationshipStatus,
ValidateKtxRelationshipDiscoveryCandidatesInput,
} from './relationship-validation.js';
export { validateKtxRelationshipDiscoveryCandidates } from './relationship-validation.js';
export type { SqliteLocalScanEnrichmentStateStoreOptions } from './sqlite-local-enrichment-state-store.js';
export { SqliteLocalScanEnrichmentStateStore } from './sqlite-local-enrichment-state-store.js';
export type { KtxColumnTypeMapping } from './type-normalization.js';
export {
inferKtxDimensionType,
ktxColumnTypeMappingFromNative,
normalizeKtxNativeType,
} from './type-normalization.js';
export type {
KtxColumnSampleInput,
KtxColumnSampleResult,
KtxColumnStatsInput,
KtxColumnStatsResult,
KtxConnectionDriver,
KtxConnectorCapabilities,
KtxCredentialEnvelope,
KtxCredentialEnvReference,
KtxCredentialFileReference,
KtxEmbeddingPort,
KtxEventPropertyDiscovery,
KtxEventPropertyDiscoveryInput,
KtxEventPropertyValuesInput,
KtxEventPropertyValuesResult,
KtxEventStreamDiscoveryPort,
KtxEventTypeDiscovery,
KtxEventTypeDiscoveryInput,
KtxNetworkEndpoint,
KtxNetworkTunnelPort,
KtxNetworkTunnelRequest,
KtxOptionalConnectorCapabilities,
KtxProgressPort,
KtxProgressUpdateOptions,
KtxQueryResult,
KtxReadOnlyQueryInput,
KtxResolvedCredentialEnvelope,
KtxConnectorTestResult,
KtxScanArtifactPaths,
KtxScanConnector,
KtxScanContext,
KtxScanDiffSummary,
KtxScanEnrichmentStage,
KtxScanEnrichmentStateSummary,
KtxScanEnrichmentSummary,
KtxScanInput,
KtxScanLoggerPort,
KtxScanMode,
KtxScanRelationshipSummary,
KtxScanReport,
KtxScanTrigger,
KtxScanWarning,
KtxScanWarningCode,
KtxSchemaColumn,
KtxSchemaDimensionType,
KtxSchemaForeignKey,
KtxSchemaScope,
KtxSchemaSnapshot,
KtxSchemaTable,
KtxSchemaTableKind,
KtxStructuralSyncStats,
KtxTableListEntry,
KtxTableRef,
KtxTableSampleInput,
KtxTableSampleResult,
} from './types.js';
export { createKtxConnectorCapabilities } from './types.js';