Skip to main content
The 3ngram MCP server exposes the following briefing tools. Every entry is generated from the tool’s source signature and docstring, so this page never drifts from the backend.
Required parameters are marked with the required attribute. Optional parameters show their default value.

briefing

Generate Session Briefing · read-only · non-destructive · non-idempotent · closed-world Return a single structured briefing covering commitments, blockers, overdue, stale commitments, recent decisions, and preferences. Collapses the per-section resource-read sequence (engram://commitments etc.) into one tool call. Requires an explicit selector: pass exactly one of project, scope, or all=True. A bare briefing() raises BadRequestError — the legacy unscoped firehose is now one explicit all=True away (WS1-R4 / #4248). The selector applies uniformly to every section (commitments, blockers, overdue, stale, recent decisions, preferences, proposed closures), so a briefing cannot leak a memory from a scope the selector excludes. Returns a dict shaped as BriefingResponse: {project, commitments, blockers, overdue, stale, recent_decisions, preferences}. Each memory list contains MemoryHit objects (id, topic, content, status, due_date, …). The structured payload is surfaced verbatim as MCP structuredContent alongside the human-readable text. Returns: dict[str, Any] | ToolResult | str Source: backend/src/engram/mcp/tools/briefing.py

Parameters

project
str | None
default:"None"
Optional project name. Resolved through the scope-defaulting policy (alias resolution + user_scope_config mapping) so the briefing is scoped to the project’s effective scope, not just a literal project match. The canonical (alias-resolved) project is echoed back in the payload.
scope
str | None
default:"None"
Optional scope (personal | work) to bind every section to. Wins over project-derived defaulting. Validated via validate_scope; an invalid value raises BadRequestError.
all
bool
default:"False"
Explicit opt-out of scope defaulting. When True, restore the legacy unscoped firehose (no scope predicate on any section); combine with project to scope by project across all scopes. all is not a scope string and is never validated as one.
brief
bool
default:"False"
If True, return a compact representation — drops content from every MemoryHit in the structured payload and emits a one-line- per-memory text block instead of serialized JSON. Recommended as the default for agent workflows: the full mode returns ~50KB per call (Claude Code persists tool output over ~20KB to disk), while brief mode typically lands under 10KB. Follow up with get_memories(ids=[...]) when you need the full content of specific items.
sections
list[str] | None
default:"None"
Optional whitelist of sections to include. Valid values: commitments, blockers, overdue, stale, recent_decisions. Omitted sections return as empty lists in the structured payload and are skipped from text output. Preferences are always included (cheap). None (default) returns every section.
restrict_ids
list[int] | None
default:"None"
#4801 Work Context candidate-restriction. When a collection (possibly empty), every memory section (commitments, blockers, overdue, stale, decisions, preferences) and the proposed-closures section is narrowed to exactly those memory ids — the native lens that use_context brief/monitor modes pass. The restriction is intersected with each section’s own visibility predicate, so it can only narrow, never widen. None (default) applies no restriction and preserves the global briefing behaviour. An empty collection resolves every section to zero rows.