import type { AgentId } from './types.js';
/**
 * On-disk schema of an agent's MCP config file. One entry per distinct
 * serialization, NOT one per agent -- most harnesses share Claude's shape.
 */
export type McpFormat = 
/** `{ "mcpServers": { "<name>": {command,args,env} | {url,headers?} } }` */
'claude-json'
/** Claude shape, but a remote server is keyed `serverUrl` and has no headers. */
 | 'antigravity-json'
/** `{ "mcp": { "servers": { "<name>": ... } } }`, remote carries `transport`. */
 | 'openclaw-json'
/** `{ "mcp": { "<name>": {type:'local',command:[...]} | {type:'remote',url} } }` */
 | 'opencode-jsonc'
/** `[mcp_servers.<name>]` TOML table. */
 | 'toml'
/** `mcp_servers:` YAML mapping. */
 | 'yaml'
/** `{ schema_version, mcp_servers: { "<name>": {transport, ..., enabled} } }` */
 | 'muse-json';
/** The complete MCP contract for one agent. */
export interface McpTarget {
    /** MCP config file under a HOME root (a version home, or the real HOME). */
    home(home: string): string;
    /** Project-scoped MCP config file for a repo at `cwd`. */
    project(cwd: string): string;
    /**
     * Serialization of that file, or `null` when agents-cli cannot yet write this
     * harness's MCP config. Paths still resolve for the read/detect side.
     */
    format: McpFormat | null;
    /** Required when `format` is null: why the write path refuses. */
    unsupportedReason?: string;
    /**
     * True when the harness reads this config from the user's REAL home rather
     * than a per-version home, so `home()` ignores its argument. Callers that
     * reason about version isolation must check this rather than assuming every
     * target is version-scoped.
     */
    homeGlobal?: boolean;
    /**
     * When set, `installMcpServers` registers through the harness's own CLI
     * (`claude mcp add` / `codex mcp add`) instead of writing the file directly.
     * The path/format above still describe where that CLI lands the entry.
     */
    cli?: 'claude' | 'codex';
}
/**
 * Single source of truth for every MCP-capable agent's config location and
 * format. Keys MUST equal `capableAgents('mcp')` -- pinned by
 * `mcp-registry.test.ts`.
 */
export declare const MCP_TARGETS: Partial<Record<AgentId, McpTarget>>;
/** The registry entry for `agent`, or undefined when it stores no MCP config. */
export declare function mcpTarget(agent: AgentId): McpTarget | undefined;
/**
 * Why the write path refuses `agent`, or null when it can write.
 *
 * Two distinct refusals, both loud: the agent has no entry at all (not
 * MCP-capable, or a hard-deprecated id), or it has one with `format: null`.
 */
export declare function mcpWriteUnsupportedReason(agent: AgentId): string | null;
