Files
TREK/server/src/nest/auth/auth.mcp.ts
T
Maurice 3efedd5e48 refactor(server): decorate the last three MCP prompts
The prompts registrar is gone. Each prompt moves to the domain that owns its
data instead of a shared file that had to import three bridges to serve them.

packing-list goes to PackingMcp and budget-overview to BudgetMcp, both reusing
the `when` addon gate their tools already carry — so a disabled addon keeps the
prompt out of the listing, exactly as the `if (isAddonEnabled(...))` around the
registration call did. Both keep taking the trip title through trips.bridge:
TripsModule imports PackingModule and BudgetModule, so injecting TripsService
would close a cycle. Same documented in-container exception as atlas.mcp.ts, and
the registrar reached for it the same way.

token_auth_notice goes to a new AuthMcp — it is a statement about how the
session authenticated, not about trip data, and it injects nothing because the
message is static. Its `if (isStaticToken)` guard becomes `when: (ctx) =>
ctx.isStaticToken`; the registry hands `when` the session context, so an
OAuth 2.1 session never sees the prompt listed at all, which is what the
registrar achieved by skipping registration.

src/mcp/tools/ is down to _shared.ts and journey.ts. journey stays until
services/journeyService folds, which waits on memories.
2026-08-08 21:20:36 +02:00

37 lines
1.5 KiB
TypeScript

import { McpController, Prompt, type McpContext } from '@trek/nest-mcp';
/**
* Auth-related MCP surface. One prompt today, moved 1:1 from the legacy
* registrar src/mcp/tools/prompts.ts.
*
* It lives in the auth domain rather than a domain of its own because it is a
* statement about how the session authenticated, not about any trip data — and
* it injects nothing, since the message is static.
*
* The registrar gated it with an `if (isStaticToken)` around the registration
* call. `when` receives the session context, so that becomes a declarative gate
* with the same effect: OAuth 2.1 sessions never see the prompt listed at all.
*/
@McpController()
export class AuthMcp {
@Prompt({
name: 'token_auth_notice',
title: 'Static Token Auth Notice',
description: 'Notification that this session uses a static API token which will be deprecated',
argsSchema: {},
when: (ctx: McpContext) => ctx.isStaticToken,
})
async tokenAuthNotice() {
return {
description: 'Static token deprecation notice',
messages: [{
role: 'user' as const,
content: {
type: 'text' as const,
text: '⚠️ This MCP connection is authenticated with a static API token (trek_…). Static token authentication will be deprecated in a future version of TREK. Please inform the user that they should migrate to OAuth 2.1 by going to Settings → Integrations → MCP → OAuth Clients in TREK and registering an OAuth 2.1 application for their MCP client.',
},
}],
};
}
}