/** * Tool families: which MCP tools an agent is shown (ADR 57). * * Fifty-nine tools cost a client that loads every schema up front about * 13 500 tokens before the first question, and a long menu makes a model * pick worse. Most conversations only read norms. So the catalogue is cut * into families, the way GitHub's MCP server cuts its own into toolsets: * * - `norms` is always there: the method, the account, and the norm reader. * - `dossiers` adds the project work: questions, findings, decisions, * attachments, templates, deliverables and the office's methods. * - `sites` adds the site scan and its readings. * - `ingest` adds the ingestion tools (stdio only: they read a local PDF). * * "Simple" is `norms` alone. "Full" is everything the transport serves, and * stays the default: the published ChatGPT plugin is a snapshot of the full * list, and changing what a connection sees is the user's choice, never ours. * * ⚠️ Read by the browser (the connections page) and by the generator of the * npm package's catalogue: imports nothing, erasable TypeScript only. The * npm package gets a verbatim copy (`toolsets.gen.ts`). * `mcpToolsets.test.ts` checks that every catalogue tool has a family. */ export type Toolset = 'norms' | 'dossiers' | 'sites' | 'ingest'; export declare const TOOLSETS: ReadonlyArray; /** The families a user can turn on or off; `norms` cannot be turned off. */ export declare const OPTIONAL_TOOLSETS: ReadonlyArray; export declare const TOOLSET_OF: Readonly>; /** A tool with no family is shown only in full mode, never hidden by mistake. */ export declare function toolsetOf(name: string): Toolset | null; /** * What a connection was set to. `null` means full: every tool the transport * serves, the behaviour of every connection made before families existed. */ export type ToolsetChoice = ReadonlyArray | null; export declare const SIMPLE_TOOLSETS: ReadonlyArray; /** * Read a choice written by a person or a flag: `simple`, `full`, `all`, or a * comma list such as `dossiers,sites`. Unknown words are dropped rather than * refused, so a typo degrades to fewer tools, never to a server that does not * start. `norms` is always added back. */ export declare function parseToolsets(raw: string | null | undefined): ToolsetChoice; /** Whether a tool is shown under a choice. */ export declare function toolInChoice(name: string, choice: ToolsetChoice): boolean; /** Whether the choice carries a family (a full choice carries all of them). */ export declare function choiceHas(choice: ToolsetChoice, family: Toolset): boolean; /** The stored form: a sorted list, or `undefined` for full. */ export declare function normalizeChoice(choice: ToolsetChoice): Toolset[] | undefined;