/** * MCP server subject module: declared/resolved/actual payloads, scanner * composition (canonical-extensions + mcp-config(workspace) + mcp-config(agent)), * and projections via the shared helper. * * MCP servers carry a declared `enabled` flag in settings. Disabled servers * remain installed on disk and in the lockfile but are removed from agent * configs unless the target agent has a native enabled toggle. */ import * as Effect from "effect/Effect"; import * as Option from "effect/Option"; import type { AgentId } from "../../../agents/types.js"; import { type ExtensionName } from "../../../extensions/common.js"; import type { Lockfile, McpServerLockEntry } from "../../../lockfile/schema.js"; import type { McpServerEntry, Settings } from "../../../settings/schema.js"; import type { Diagnostics } from "../diagnostics.js"; import type { LockfileReadError, SettingsReadError } from "../errors.js"; import type { CanonicalExtensionOccurrence, McpConfigOccurrence } from "../scanners/types.js"; import type { ActivationState, ExtensionKey, InstallationOrigin, InstalledPackRef, Scope } from "../types.js"; export type McpServerDetectionOrigin = { readonly _tag: "canonical-axm-mcp-server"; } | { readonly _tag: "external-axm-mcp-server"; } | { readonly _tag: "workspace-mcp-config"; } | { readonly _tag: "agent-mcp-config"; readonly agentId: AgentId; }; export interface DeclaredMcpServer { readonly name: ExtensionName; readonly entry: McpServerEntry; } export type DeclaredMcpServers = ReadonlyArray; export interface ResolvedMcpServer { readonly name: ExtensionName; readonly lockEntry: McpServerLockEntry; } export type ResolvedMcpServers = ReadonlyArray; /** * One observable MCP server materialization. `configFile` is the absolute * path to the config file containing the server entry (workspace `.mcp.json` * or an agent-native MCP config). For canonical/external AXM occurrences, * `configFile` is null and `contentRoot` carries the package directory. */ export interface ActualMcpServer { readonly key: ExtensionKey<"mcp-server">; readonly origin: McpServerDetectionOrigin; readonly contentRoot: string | null; readonly packageRoot: string | null; readonly configFile: string | null; readonly config: Readonly> | null; } export type ActualMcpServers = ReadonlyArray; export interface McpServerPackMember { readonly name: ExtensionName; readonly providingPack: InstalledPackRef; } export interface InstalledMcpServer { readonly key: ExtensionKey<"mcp-server">; readonly installationOrigin: InstallationOrigin; readonly activation: ActivationState; readonly resolved: Option.Option; readonly actual: ReadonlyArray; readonly providingPacks: ReadonlyArray; } export interface UnmanagedMcpServer { readonly key: ExtensionKey<"mcp-server">; readonly actual: ActualMcpServer; } export interface McpServerScopedLoaders { readonly settings: Effect.Effect, SettingsReadError>; readonly lockfile: Effect.Effect, LockfileReadError>; } export interface McpServerScanners { readonly canonical: Effect.Effect>; readonly mcpConfig: Effect.Effect>; } export interface InstalledPackForMcpServers { readonly ref: InstalledPackRef; readonly mcpServers: ReadonlyArray; } export interface McpServerExtensionsApiDeps { readonly scope: Scope; readonly loaders: McpServerScopedLoaders; readonly scanners: McpServerScanners; readonly installedPacks: Effect.Effect, SettingsReadError | LockfileReadError>; readonly diagnostics: Diagnostics; } export interface McpServerExtensionsApi { readonly declared: Effect.Effect, SettingsReadError>; readonly resolved: Effect.Effect, LockfileReadError>; readonly actual: Effect.Effect; readonly installed: Effect.Effect, SettingsReadError | LockfileReadError>; readonly byName: (name: string) => Effect.Effect, SettingsReadError | LockfileReadError>; readonly declaredByName: (name: string) => Effect.Effect, SettingsReadError>; readonly active: Effect.Effect, SettingsReadError | LockfileReadError>; readonly unmanaged: Effect.Effect, SettingsReadError | LockfileReadError>; } /** * Build the MCP server subject API. Returns an `Effect` because the * projection cell is wrapped in `Effect.cached` so the four derived cells * share one in-flight execution per scope, mirroring `state.ts`. */ export declare const makeMcpServerExtensionsApi: (deps: McpServerExtensionsApiDeps) => Effect.Effect; //# sourceMappingURL=mcp-server.d.ts.map