/** * Startup notices — stderr only. * * This server speaks JSON-RPC over stdout. Anything on stdout that is not a * protocol message corrupts the stream for every client, so every notice here * goes to stderr. `src/__tests__/stdout-purity.test.ts` spawns the built server * and proves stdout stays clean up to the first protocol message. * * Both notices print once per process. There is deliberately no sentinel file: * these exist to be discovered, and a sentinel hides them from the operator who * has not acted on them yet. `SERVICIALO_QUIET=true` silences both — and only * these two. The mode banner and the first-run telemetry notice keep their * existing behavior; a patch release does not redefine existing output. */ /** Comment window close for RFC-005, per PR #21's process metadata. */ export declare const RFC_005_COMMENT_WINDOW_END = "2026-09-06"; /** Final comment period close. The window notice stops printing after this day. */ export declare const RFC_005_FCP_END = "2026-09-13"; export declare const RFC_005_URL = "https://github.com/servicialo/mcp-server/pull/21"; export declare const IMPLEMENTORS_URL = "https://servicialo.com/implementors"; type Env = Record; /** True when the operator asked for the new notices to stay silent. */ export declare function isQuiet(env?: Env): boolean; /** * The RFC-005 comment-window notice, or null once the FCP has closed. * * Independent of `SERVICIALO_TELEMETRY`: this is an announcement about the * protocol, not a telemetry emission, and opting out of telemetry is not a * request to stop hearing about the specification. */ export declare function windowNotice(now?: number): string | null; /** * The anonymous-node notice, or null when this node already identifies itself. * * Claims only what the shipped code delivers: a verified implementation is * rendered on /implementors, and the contact email is hashed before it leaves * the host. It does not promise announcements — `impl_contact_hash` is a * one-way digest and cannot be used to reach anyone. */ export declare function anonymousNodeNotice(identified: boolean): string | null; export interface NoticeOptions { /** Whether telemetry is enabled; the anonymous-node notice is moot without it. */ telemetryEnabled: boolean; /** Whether this node already sets at least one identity variable. */ identified: boolean; now?: number; env?: Env; /** Sink for the rendered block. Defaults to stderr — never stdout. */ write?: (chunk: string) => void; } /** * Render the startup notice block, or null when nothing is due. * * Kept pure so the gates are testable without spawning a process or capturing * a stream. */ export declare function renderNotices(opts: Omit): string | null; /** Write the due notices to stderr. */ export declare function printStartupNotices(opts: NoticeOptions): void; export {}; //# sourceMappingURL=notices.d.ts.map