ask-fable
PYPI · ASK-FABLE · SCANNED SEP 20
MCP server for Anthropic's Claude Fable, Opus 5, and multi-model reasoning councils.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs setuptools.build_meta at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 2 of 38 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency32
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: no license is declared. See how to fix → Fail
- Actively maintained (last published 11 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability60
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 15033 tokens (~395/item across 38 items; 38 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management40
- Stability observed for 12 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage97
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 92% of tool parameters carry a description.Partial
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "context_delete" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 39 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the ask-fable MCP server?
ask-fable runs locally as a PyPI package, launched with uvx ask-fable. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · ask-fable
claude mcp add baggybin-ask-fable -- uvx ask-fable
{
"mcpServers": {
"baggybin-ask-fable": {
"command": "uvx",
"args": [
"ask-fable"
]
}
}
} {
"servers": {
"baggybin-ask-fable": {
"command": "uvx",
"args": [
"ask-fable"
]
}
}
} codex mcp add baggybin-ask-fable -- uvx ask-fable
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"baggybin-ask-fable": {
"type": "local",
"command": [
"uvx",
"ask-fable"
],
"enabled": true
}
}
} openclaw mcp add baggybin-ask-fable --command uvx --arg ask-fable
mcp_servers:
baggybin-ask-fable:
command: "uvx"
args: ["ask-fable"] {
"McpServers": {
"baggybin-ask-fable": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"ask-fable"
]
}
}
} assistant mcp add baggybin-ask-fable -t stdio -c uvx -a ask-fable
{
"mcpServers": {
"baggybin-ask-fable": {
"command": "uvx",
"args": [
"ask-fable"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 19 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.
- 16 Sept 26 +4
- Stability: unverified → 0.27 ▲ functional
- 9 Sept 26 +15
- Malware scan: unverified → pass ▲ security
- 8 Sept 26 48
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed pypi/ask-fable@0.13.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | setuptools.build_meta |
Background: Why install scripts are a supply-chain risk →
Dependencies 38 packages
| Packages resolved | 38 |
|---|---|
| Stale | 1 |
| No linked repository | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
ask ~758
YOUR DEFAULT MOVE on anything non-trivial — use it liberally and early, don't wait to be told and don't wait until you're stuck. Reach for it BEFORE you guess at unfamiliar code, an API, or a library's behavior; whenever you weigh a design or refactor trade-off; when a bug isn't fully understood; or to have a strong reasoner sanity-check a plan or diff before you commit it. One well-framed ask with the code attached beats several bare ones. `ask_opus5` is this same tool on Claude Opus 5 — cheaper and faster; use it for high-volume or long back-and-forth work and keep `ask` for the hardest calls. Ask the Fable model to reason about the SOFTWARE/ENGINEERING work you're doing: code structure, functionality, data/control flow, module and function relationships, routing, architecture, and design trade-offs. For questions about EXISTING code, ALWAYS paste the real code into `context` — the actual function/file/snippet the question is about, plus any error or failing test. The model has NO tools and CANNOT open files, so a bare file path is useless to it. Conceptual/brainstorming questions need no context and are welcome. Frame each call as ONE specific decision ('should X or Y given constraint Z' beats 'thoughts on this code?') or ONE generative prompt ('give me 5 approaches to X, with trade-offs'). Reuse the `session` key to think through a problem over several follow-up turns instead of restating everything. Answers usually take 1–3 minutes. Broad and conceptual engineering questions — including brainstorming and ideas for future code — are fine. Refused only when the question itself directly asks for offensive-security work (exploit development, attack tooling) or non-software domain knowledge (biology/medicine refused; neuroscience, cognitive science, AI/ML, and CS are in-scope); questions about security-related code are normal engineering. The result carries a `sidecar` ({recommendation, confidence, needs_context}); when the model needs more, it returns a `followup`…
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional code snippets, file paths, or structural context. |
| context_ref | – | – | Key(s) of context previously saved with `context_write` to pull in and prepend to `context` — so you paste a big codebase context ONCE and reference it by key across many asks instead of re-pasting.… |
| question | string | yes | A specific question about concrete software code/architecture (structure, functionality, data flow, module/function relationships, routing). |
| reset | boolean | – | Dump+clear this session before asking, starting a fresh conversation. |
| session | string | – | Conversation key. Reuse it to ask follow-ups (Fable keeps context); use a new key or reset=true to start a fresh topic. |
| trusted | boolean | – | Operator-authorized. When true, the prohibited-use denylist runs in log-only mode: security vocabulary in the question is audited but does not block. Use for legitimate security-engineering work (PoC… |
No output schema declared.
No examples provided.
ask_atlas ~700
Ask a single Atlas Cloud text model — on its own — to reason about the SOFTWARE/ENGINEERING work you're doing: code structure, functionality, data/control flow, module and function relationships, routing, architecture, and design trade-offs. Pass `model` to pick from 60+ models (e.g. 'xai/grok-4.6', 'openai/gpt-5.6-sol', 'anthropic/claude-opus-4.8', 'deepseek-ai/deepseek-v4-pro'); omit it to use the default. Pass `effort` (quick/standard/deep; default **deep** — max reasoning) to set the answer budget. REACH FOR THIS the first time an Atlas model is wanted: call `list_atlas_models(task=<the user's job>)`; use an accepted native selection when one is returned, or render its structured `picker` fallback, then call `ask_atlas` with the selected model and effort (the catalog endpoint is free — no tokens charged). PREFER `ask_grok` (local `grok` CLI) over Atlas for xAI Grok models when the binary is installed — `ask_atlas` with `xai/grok-*` auto-routes to the local CLI when available. Other Atlas models remain HTTP. Atlas models are ALSO reachable in `ask_council` / `ask_chain` / `ask_debate` as dynamic `atlas:<model>` tokens, e.g. 'atlas:xai/grok-4.6' (Grok tokens prefer the local CLI when present). OpenRouter models join the same way as 'openrouter:<model-id>'. Single-turn. Needs ASK_FABLE_ATLAS_API_KEY (or the ATLASCLOUD_API_KEY the Atlas Cloud MCP server already uses) for non-Grok models. Broad and conceptual engineering questions (including brainstorming/ideas for future code) are fine — add a snippet or file path in `context` when the question is about existing code. Direct offensive-security asks (exploit development, attack tooling) and non-software domain knowledge (biology/medicine refused; neuroscience, cognitive science, AI/ML, and CS are in-scope) are refused.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional code snippets, file paths, or structural context. |
| context_ref | – | – | Key(s) of context saved with `context_write` to pull in and prepend to `context` — paste a big context ONCE, reference it by key here. Missing keys are reported, not fatal. |
| effort | string | – | Answer budget / reasoning depth (default 'deep' — max reasoning). 'quick' (~1k tokens, concise), 'standard' (~4k tokens), 'deep' (~16k tokens, opportunistically sends reasoning_effort:high). Atlas ha… |
| model | string | – | Atlas Cloud model id (e.g. 'xai/grok-4.6', 'openai/gpt-5.6-sol', 'anthropic/claude-opus-4.8'). Omit to use the server's default. Call `list_atlas_models` to see the live catalog with pricing, then of… |
| question | string | yes | A specific software/engineering question to ask an Atlas Cloud text model. |
No output schema declared.
No examples provided.
ask_atlas_council ~805
DIRECTIONAL — the Atlas-only counterpart to `ask_council`, with GPT-5.6 Sol as the default adjudicator: reserve it for a contentious or hard-to-reverse decision you want several Atlas Cloud models to cross-check, not for routine questions (default to `ask`; at most one council call per problem, and check `quorum`/`degraded` in the result). Ask several Atlas Cloud models the same SOFTWARE/ENGINEERING question at once, then get back one answer the adjudicator synthesizes by reconciling all of them (each raw answer is also returned under `sources`). The adjudicator defaults GPT-first: the local `codex` CLI (GPT-5.6 Sol, no Atlas tokens) when installed, else Atlas-hosted 'openai/gpt-5.6-sol', else Fable — override with `synthesizer` (any council token) or persist a choice with `configure_atlas_council`; the result's `synthesis` block reports what actually adjudicated. Pass `models` as a list of Atlas model ids (e.g. ['zai-org/glm-5.2','deepseek-ai/deepseek-v4-pro', 'moonshotai/kimi-k2']; an 'atlas:' prefix is optional). Omit `models` to use the configured set (configure_atlas_council / ASK_FABLE_ATLAS_COUNCIL), else 3 featured catalog models, one per provider. Needs ASK_FABLE_ATLAS_API_KEY (or the ATLASCLOUD_API_KEY the Atlas Cloud MCP server already uses); xai/grok-* members reroute to the local `grok` CLI when installed, no key needed. Use `ask_council` instead to mix Atlas models with Fable/MiniMax/GLM/DeepSeek in one council. Same scope as `ask`: broad and conceptual engineering questions (including brainstorming) are fine; direct offensive-security asks and non-software domain knowledge (biology/medicine refused; neuroscience, cognitive science, AI/ML, and CS are in-scope) are refused.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional code snippets, file paths, or structural context (shared by all models). |
| context_ref | – | – | Key(s) of context saved with `context_write` to pull in and prepend to `context` — paste a big context ONCE, reference it by key here. Missing keys are reported, not fatal. |
| models | array | – | Atlas Cloud model ids (e.g. ['zai-org/glm-5.2', 'deepseek-ai/deepseek-v4-pro']); an 'atlas:' prefix is optional. Omit to use the configured set (configure_atlas_council / ASK_FABLE_ATLAS_COUNCIL), el… |
| question | string | yes | A specific software/engineering question to ask several Atlas Cloud models; the adjudicator (GPT-5.6 Sol by default) then synthesizes their answers into one. |
| session | string | – | Optional coordination key for the cross-agent hub (`session_list` / `session_peek`). Reuse the same key across agents working the same decision so turns group together. Defaults to the tool name (`as… |
| synthesizer | – | – | Model that reconciles the panel answers into one. Default ladder: the local codex CLI (GPT-5.6 Sol) when installed → 'atlas:openai/gpt-5.6-sol' when Atlas is configured → 'fable'. Falls back to Fable… |
No output schema declared.
No examples provided.
ask_chain ~786
DIRECTIONAL, SEQUENTIAL — the relay counterpart to `ask_council`. Where the council asks N models the SAME question in parallel and synthesizes their independent answers ('what's true?'), the chain threads a question through an ORDERED pipeline where each stage refines the last ('make this answer better'). The operator sets the order as a `pipeline` string like 'm3 > glm > deepseek > fable' (or an ordered `models` array). Stage 1 drafts; each middle stage is told to solve independently and CRITIQUE the prior draft before extending it (an anti-anchoring guard); the final stage DECIDES, seeing all prior stages as anonymized peers. Best for two things a council can't do: cost-tiered escalation (a cheap/fast model does the legwork, Fable finalizes) and explicit draft → red-team → decide pipelines. Costs MORE latency than a council (stages run sequentially, not in parallel), so reserve it for when the ordered refinement is the point. Draft → critique → refine is also a natural IDEATION pipeline: a cheap model brainstorms broadly, later stages prune and sharpen the ideas. Order matters and repeats are allowed ('fable > glm > fable' = draft, critique, re-decide). A mid-chain model that refuses/errors is skipped (recorded); if the final stage fails, Fable synthesizes the survivors. The result carries a `recommendation_drift` trail and `material_drift` flag — the chain analogue of the council's consensus signal — so you can see whether the answer was refined or just rubber-stamped. Same scope as `ask`: broad and conceptual engineering questions (including brainstorming) are fine; direct offensive-security asks and non-software domain knowledge (biology/medicine refused; neuroscience, cognitive science, AI/ML, and CS are in-scope) are refused. Aliases: 'm3' = minimax, 'opus5' = opus. Any stage can be 'opus' (Claude Opus 5) — a cheaper, faster terminus than Fable, e.g. 'm3 > opus'. The group token 'twin' (aka 'twin flames') expands in place to two stages, fable then opus, so…
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional code snippets, file paths, or structural context (seen by every stage). |
| context_ref | – | – | Key(s) of context saved with `context_write` to pull in and prepend to `context`. |
| models | array | – | The ordered pipeline as an array (alternative to `pipeline`), e.g. ['minimax','glm','fable']. Order-sensitive; duplicates allowed. |
| pipeline | string | – | The ordered pipeline as a string, e.g. 'm3 > glm > deepseek > fable'. Split on '>'. Order matters and repeats are allowed. Aliases: 'm3' = minimax. The group token 'twin' (aka 'twin flames') expands… |
| question | string | yes | A specific software/engineering question to thread through the pipeline. |
| session | string | – | Optional coordination key for the cross-agent hub (`session_list` / `session_peek`). Reuse the same key across agents working the same decision so turns group together. Defaults to the tool name (`as… |
No output schema declared.
No examples provided.
ask_codex ~356
Ask OpenAI's model (GPT-5.6 Sol, via the local `codex` CLI in non-interactive `codex exec` mode) — on its own, independent of Fable — to reason about the SOFTWARE/ENGINEERING work you're doing: code structure, functionality, data/control flow, module and function relationships, routing, architecture, and design trade-offs. Broad and conceptual engineering questions (including brainstorming/ideas for future code) are fine — add a snippet or file path in `context` when the question is about existing code. Runs hermetically and read-only (it can't see or touch your repo — put the code it needs in `context`). Single-turn. Requires the `codex` CLI installed and logged in on the server (reported as binary_missing otherwise). Direct offensive-security asks (exploit development, attack tooling) and non-software domain knowledge (biology/medicine refused; neuroscience, cognitive science, AI/ML, and CS are in-scope) are refused. Use `ask` for Fable, `ask_m3` for MiniMax, `ask_gemini` for Gemini, `ask_glm` for GLM, or `ask_council` to ask several and get a synthesized answer.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional code snippets, file paths, or structural context. |
| context_ref | – | – | Key(s) of context saved with `context_write` to pull in and prepend to `context` — paste a big context ONCE, reference it by key here. Missing keys are reported, not fatal. |
| question | string | yes | A specific software/engineering question to ask Codex (GPT-5.6 Sol) on its own. |
No output schema declared.
No examples provided.
ask_council ~1,481
DIRECTIONAL — reserve this for a genuinely contentious or HARD-TO-REVERSE decision (architecture, concurrency, data model, public API, migration) where a single opinion isn't enough and you want several models cross-checked, or for divergent brainstorming where you want independent idea sets merged without losing distinct options. It's slower and heavier than `ask`, so DON'T reach for it on routine questions — default to `ask`, and use at most one council call per problem. Check `quorum`/`degraded` in the result: a 1-of-N answer is one opinion, not consensus. Ask several models at once the same SOFTWARE/ENGINEERING question, then get back one answer that Fable synthesizes by reconciling all of them (each raw answer is also returned under `sources`). By default asks Fable (whichever id is newest) + MiniMax (MiniMax-M3), plus DeepSeek (deepseek-v4-pro) when ASK_FABLE_DEEPSEEK_API_KEY is configured — cheap direct models are preferred and consulted first. Pass `models` to choose from ['fable','fable51','opus','deepseek','minimax','glm','gemini','codex','grok','kimi'] ('fable' tracks the newest Fable automatically and 'fable51' pins claude-fable-5-1 even after it stops being newest — they are the same model today, so naming both buys you nothing; 'opus' is Claude Opus 5 on the same OAuth session as Fable — always available, half the price; 'gemini'/'codex'/'grok'/'kimi' need their local CLIs; 'glm'/'deepseek' need API keys configured on the server). You can also add Ollama Cloud models as 'ollama:<model>' tokens (e.g. 'ollama:qwen3-coder:480b-cloud', 'ollama:nemotron-3-ultra:cloud'); these are reached via a local signed-in `ollama` daemon by default (reported+skipped if unreachable). The group token 'twin' (aka 'twin flames') expands to BOTH Anthropic reasoners at once — fable + opus — so models=['twin'] is a dual Fable/Opus 5 invocation and models=['twin','minimax'] adds a third voice to it. Both ride the OAuth session, so it needs no provider keys and is the cheapest…
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional code snippets, file paths, or structural context (shared by all models). |
| context_ref | – | – | Key(s) of context saved with `context_write` to pull in and prepend to `context` — paste a big context ONCE, reference it by key here. Missing keys are reported, not fatal. |
| models | array | – | Explicit list of models to ask, from ['fable','opus','deepseek','minimax','glm','gemini','codex','grok','kimi'] (aliases: 'm3' = minimax, 'gpt' = codex, 'xai' = grok, 'opus5' = opus), plus any 'ollam… |
| question | string | yes | A specific software/engineering question to ask the selected models; Fable then synthesizes their answers into one. |
| session | string | – | Optional coordination key for the cross-agent hub (`session_list` / `session_peek`). Reuse the same key across agents working the same decision so turns group together. Defaults to the tool name (`as… |
| synthesizer | – | – | Model that reconciles the panel answers into one (default 'fable'). Any council token works: 'opus' (Claude Opus 5 — cheaper and faster than Fable), 'codex' (alias 'gpt', GPT-5.6 Sol via the local CL… |
| tier | string | – | Named council preset (used when `models` is omitted): 'default' = fable+minimax, +deepseek when its API key is configured; 'twin' = the twin flames, fable+opus — a dual Fable/Opus 5 invocation needin… |
No output schema declared.
No examples provided.
ask_debate ~793
DIRECTIONAL, ADVERSARIAL — pit two models AGAINST each other over a structured claims ledger, then have a fresh third model adjudicate. Unlike `ask_council` (N models vote independently) or `ask_chain` (each stage refines the last), the debate makes one model PROPOSE a position decomposed into load-bearing claims, the other REFUTE each claim (concede or contest-with-a-concrete-failure-scenario), the proposer REVISE under fire, and an anonymized adjudicator RULE on the merits. Reserve it for a genuinely contentious, hard-to-reverse SOFTWARE decision where you want the strongest case for AND against stress-tested — 'is this concurrency design sound', 'should we commit to approach X or Y' — not for questions with a clear answer. Pick the pair with `proposer` and `opponent` (e.g. proposer='fable', opponent='codex' for Fable vs GPT-5.6 Sol, or opponent='glm'); defaults to fable vs minimax. `adjudicator` picks who rules (default 'fable'; e.g. 'opus' for Claude Opus 5, or 'codex') — keep it off the debating pair so the ruling stays third-party. `rounds` is 1 (default) or 2 (adds a rebuttal pass). The server decides the outcome deterministically from the ledger — `resolution` is 'conceded' (opponent conceded everything), 'converged' (all contests resolved and both sides agree), 'adjudicated' (the adjudicator decided), or 'stalemate' (both dug in with nothing new → confidence is mechanically downgraded). Costs up to four sequential model calls, so it's the most expensive mode — use it sparingly. Degrades to a single-critic pass when the opponent is unconfigured. Same scope as `ask`: broad and conceptual engineering questions are fine; direct offensive-security asks and non-software domain knowledge (biology/medicine refused; neuroscience, cognitive science, AI/ML, and CS are in-scope) are refused. Aliases: 'm3' = minimax, 'gpt' = codex, 'opus5' = opus.
| Name | Type | Req | Description |
|---|---|---|---|
| adjudicator | string | – | Model that rules on the contested claims (default 'fable'; 'opus' for Claude Opus 5, 'codex' for GPT-5.6 Sol, …). It sees the ledger anonymized. Any council token works; keep it off the debating pair… |
| context | string | – | Optional code snippets, file paths, or structural context (seen by both sides). |
| context_ref | – | – | Key(s) of context saved with `context_write` to pull in and prepend to `context`. |
| opponent | string | – | Model that refutes it (default 'minimax'). Try 'codex' (GPT-5.6 Sol) or 'glm'. |
| proposer | string | – | Model that proposes the position (default 'fable'). Aliases: 'm3'=minimax, 'gpt'=codex. |
| question | string | yes | A contentious, hard-to-reverse software/engineering decision to debate (e.g. 'is this concurrency design sound?', 'approach X or Y?'). |
| rounds | integer | – | 1 (propose→refute→revise, default) or 2 (adds a rebuttal pass before adjudication). |
| session | string | – | Optional coordination key for the cross-agent hub (`session_list` / `session_peek`). Reuse the same key across agents working the same decision so turns group together. Defaults to the tool name (`as… |
No output schema declared.
No examples provided.
ask_deepseek ~342
Ask the DeepSeek model (deepseek-v4-pro, via DeepSeek's Anthropic-compatible endpoint) — on its own, independent of Fable — to reason about the SOFTWARE/ENGINEERING work you're doing: code structure, functionality, data/control flow, module and function relationships, routing, architecture, and design trade-offs. Cheap direct API — prefer it (like `ask_m3`/`ask_glm`) over pricier cloud models for a quick independent opinion. Broad and conceptual engineering questions (including brainstorming/ideas for future code) are fine — add a snippet or file path in `context` when the question is about existing code. Single-turn. Requires ASK_FABLE_DEEPSEEK_API_KEY configured on the server (reported as not_configured otherwise). Direct offensive-security asks (exploit development, attack tooling) and non-software domain knowledge (biology/medicine refused; neuroscience, cognitive science, AI/ML, and CS are in-scope) are refused. Use `ask` for Fable, `ask_m3` for MiniMax, `ask_glm` for GLM, or `ask_council` to ask several and get a synthesized answer.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional code snippets, file paths, or structural context. |
| context_ref | – | – | Key(s) of context saved with `context_write` to pull in and prepend to `context` — paste a big context ONCE, reference it by key here. Missing keys are reported, not fatal. |
| question | string | yes | A specific software/engineering question to ask DeepSeek (deepseek-v4-pro) on its own. |
No output schema declared.
No examples provided.
ask_fable_help ~260
FREE, local and instant — no model call, no cost, no network. Returns the part of this server's manual that does NOT fit in the standing instructions (harnesses truncate those at ~2 KB). Call it when: a call came back `status:"refused"` (topic `refused` — reframe, never resend the same question); you're about to re-paste context you already sent (topic `context` — the shared bus, paste once and reference by key); you're configuring an Ollama / Atlas / OpenRouter council (topic `setup`); or you want the full tool menu with the model tokens usable in councils, chains and debates (topic `tools`). `all` returns everything. Cheap enough to call speculatively — prefer it over guessing at an argument.
| Name | Type | Req | Description |
|---|---|---|---|
| topic | string | – | Which part of the manual to return. `refused`: what to do with a status:"refused" result (reframe, never resend). `context`: the shared context bus — paste once, reference by key. `setup`: configurin… |
No output schema declared.
No examples provided.
ask_gemini ~311
Ask Google's Gemini model (Gemini 3.1 Pro, via the local `agy` CLI) — on its own, independent of Fable — to reason about the SOFTWARE/ENGINEERING work you're doing: code structure, functionality, data/control flow, module and function relationships, routing, architecture, and design trade-offs. Broad and conceptual engineering questions (including brainstorming/ideas for future code) are fine — add a snippet or file path in `context` when the question is about existing code. Single-turn. Requires the `agy` CLI installed and signed in on the server (reported as binary_missing otherwise). Direct offensive-security asks (exploit development, attack tooling) and non-software domain knowledge (biology/medicine refused; neuroscience, cognitive science, AI/ML, and CS are in-scope) are refused. Use `ask` for Fable, `ask_m3` for MiniMax, `ask_glm` for GLM, or `ask_council` to ask several and get a synthesized answer.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional code snippets, file paths, or structural context. |
| context_ref | – | – | Key(s) of context saved with `context_write` to pull in and prepend to `context` — paste a big context ONCE, reference it by key here. Missing keys are reported, not fatal. |
| question | string | yes | A specific software/engineering question to ask Gemini (Gemini 3.1 Pro) on its own. |
No output schema declared.
No examples provided.
ask_glm ~325
Ask the GLM model — on its own, independent of Fable — to reason about the SOFTWARE/ENGINEERING work you're doing: code structure, functionality, data/control flow, module and function relationships, routing, architecture, and design trade-offs. Broad and conceptual engineering questions (including brainstorming/ideas for future code) are fine — add a snippet or file path in `context` when the question is about existing code. Single-turn. Served by Z.ai's Anthropic-compatible endpoint (GLM-5.2) when ASK_FABLE_GLM_API_KEY is set; otherwise it falls back to Atlas-hosted GLM-5.3 on the Atlas key, and is only reported as not_configured when neither is available. Direct offensive-security asks (exploit development, attack tooling) and non-software domain knowledge (biology/medicine refused; neuroscience, cognitive science, AI/ML, and CS are in-scope) are refused. Use `ask` for Fable, `ask_m3` for MiniMax, or `ask_council` to ask several and get a synthesized answer.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional code snippets, file paths, or structural context. |
| context_ref | – | – | Key(s) of context saved with `context_write` to pull in and prepend to `context` — paste a big context ONCE, reference it by key here. Missing keys are reported, not fatal. |
| question | string | yes | A specific software/engineering question to ask GLM (GLM-5.2) on its own. |
No output schema declared.
No examples provided.
ask_grok ~362
Ask xAI's Grok model (grok-4.6 by default, via the local `grok` CLI in single-turn `-p` mode) — on its own, independent of Fable — to reason about the SOFTWARE/ENGINEERING work you're doing: code structure, functionality, data/control flow, module and function relationships, routing, architecture, and design trade-offs. PREFER THIS over `ask_atlas` with `xai/grok-*` whenever the `grok` binary is installed (uses your `grok login` session; no Atlas API key). Runs hermetically (tools disabled; put the code it needs in `context`). Single-turn. Requires the `grok` CLI installed and logged in on the server (reported as binary_missing otherwise). Broad and conceptual engineering questions (including brainstorming/ideas for future code) are fine. Direct offensive-security asks (exploit development, attack tooling) and non-software domain knowledge (biology/medicine refused; neuroscience, cognitive science, AI/ML, and CS are in-scope) are refused. Use `ask` for Fable, or `ask_council` with model token `grok` to include Grok in a multi-model panel.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional code snippets, file paths, or structural context. |
| context_ref | – | – | Key(s) of context saved with `context_write` to pull in and prepend to `context` — paste a big context ONCE, reference it by key here. Missing keys are reported, not fatal. |
| question | string | yes | A specific software/engineering question to ask Grok (grok-4.6) on its own via the local `grok` CLI. |
No output schema declared.
No examples provided.
ask_kimi ~419
Ask Moonshot's Kimi model (kimi-code/k3 by default, via the local `kimi` CLI in single-turn mode) — on its own, independent of Fable — to reason about the SOFTWARE/ENGINEERING work you're doing: code structure, functionality, data/control flow, module and function relationships, routing, architecture, and design trade-offs. PREFER THIS over `ask_atlas` with `moonshotai/kimi-*` whenever the `kimi` binary is installed: it runs on your Kimi Code subscription instead of per-token Atlas billing. NOTE the context caveat: k3 is a 1M-context model, but this CLI takes the prompt as a single argv value, which the kernel caps near 131k bytes — larger prompts are refused with a pointer to `ask_atlas` ('moonshotai/kimi-k3'), which has no such limit. The turn is sandboxed to pure text reasoning — the model has NO filesystem or tool access, so put the real code in `context`. Single-turn. Requires the `kimi` CLI on PATH and a completed `kimi login` (reported as binary_missing / not_configured otherwise). Direct offensive-security asks (exploit development, attack tooling) and non-software domain knowledge (biology/medicine refused; neuroscience, cognitive science, AI/ML, and CS are in-scope) are refused. Use `ask` for Fable, `ask_m3` for MiniMax, or `ask_council` to ask several and get a synthesized answer.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional code snippets, file paths, or structural context. |
| context_ref | – | – | Key(s) of context saved with `context_write` to pull in and prepend to `context` — paste a big context ONCE, reference it by key here. Missing keys are reported, not fatal. |
| question | string | yes | A specific software/engineering question to ask Kimi (kimi-code/k3) on its own via the local `kimi` CLI. |
No output schema declared.
No examples provided.
ask_m3 ~260
Ask the MiniMax model (MiniMax-M3) — on its own, independent of Fable — to reason about the SOFTWARE/ENGINEERING work you're doing: code structure, functionality, data/control flow, module and function relationships, routing, architecture, and design trade-offs. Broad and conceptual engineering questions (including brainstorming/ideas for future code) are fine — add a snippet or file path in `context` when the question is about existing code. Single-turn. Direct offensive-security asks (exploit development, attack tooling) and non-software domain knowledge (biology/medicine refused; neuroscience, cognitive science, AI/ML, and CS are in-scope) are refused. Use `ask` for Fable, or `ask_council` to ask both and get a synthesized answer.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional code snippets, file paths, or structural context. |
| context_ref | – | – | Key(s) of context saved with `context_write` to pull in and prepend to `context` — paste a big context ONCE, reference it by key here. Missing keys are reported, not fatal. |
| question | string | yes | A specific software/engineering question to ask MiniMax (MiniMax-M3) on its own. |
No output schema declared.
No examples provided.
ask_ollama ~362
Ask a single Ollama Cloud model — on its own — to reason about the SOFTWARE/ENGINEERING work you're doing: code structure, functionality, data/control flow, module and function relationships, routing, architecture, and design trade-offs. Pass `model` to pick a cloud model (e.g. 'kimi-k2.7-code:cloud', 'gpt-oss:120b-cloud', 'deepseek-v3.2:cloud'); omit it to use the server's default. Reached via a local signed-in `ollama` daemon by default (no API key needed). Single-turn. Broad and conceptual engineering questions (including brainstorming/ideas for future code) are fine — add a snippet or file path in `context` when the question is about existing code. Direct offensive-security asks (exploit development, attack tooling) and non-software domain knowledge (biology/medicine refused; neuroscience, cognitive science, AI/ML, and CS are in-scope) are refused. Use `ask_council` to mix Ollama models with Fable.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional code snippets, file paths, or structural context. |
| context_ref | – | – | Key(s) of context saved with `context_write` to pull in and prepend to `context` — paste a big context ONCE, reference it by key here. Missing keys are reported, not fatal. |
| model | string | – | Ollama Cloud model id (e.g. 'kimi-k2.7-code:cloud', 'gpt-oss:120b-cloud'). Omit to use the server's ASK_FABLE_OLLAMA_MODEL default. |
| question | string | yes | A specific software/engineering question to ask a single Ollama Cloud model. |
No output schema declared.
No examples provided.
ask_ollama_council ~549
DIRECTIONAL — the Ollama-only counterpart to `ask_council`: reserve it for a contentious or hard-to-reverse decision you want several cloud models to cross-check, not for routine questions (default to `ask`; at most one council call per problem, and check `quorum`/`degraded` in the result). Ask several Ollama Cloud models the same SOFTWARE/ENGINEERING question at once, then get back one answer that Fable synthesizes by reconciling all of them (each raw answer is also returned under `sources`). Pass `models` as a list of cloud model ids (e.g. ['qwen3-coder:480b-cloud', 'nemotron-3-ultra:cloud','kimi-k2.7-code:cloud']); an 'ollama:' prefix is optional. Omit `models` to use the server's configured set (ASK_FABLE_OLLAMA_COUNCIL). Reached via a local signed-in `ollama` daemon by default (no API key needed). Use `ask_council` instead to mix Ollama models with Fable/MiniMax/GLM/DeepSeek in one council. Same scope as `ask`: broad and conceptual engineering questions (including brainstorming) are fine; direct offensive-security asks and non-software domain knowledge (biology/medicine refused; neuroscience, cognitive science, AI/ML, and CS are in-scope) are refused.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional code snippets, file paths, or structural context (shared by all models). |
| context_ref | – | – | Key(s) of context saved with `context_write` to pull in and prepend to `context` — paste a big context ONCE, reference it by key here. Missing keys are reported, not fatal. |
| models | array | – | Ollama Cloud model ids (e.g. ['kimi-k2.7-code:cloud', 'gpt-oss:120b-cloud']); an 'ollama:' prefix is optional. Omit to use the server's configured set (ASK_FABLE_OLLAMA_COUNCIL). Requires ASK_FABLE_O… |
| question | string | yes | A specific software/engineering question to ask several Ollama Cloud models; Fable then synthesizes their answers into one. |
| session | string | – | Optional coordination key for the cross-agent hub (`session_list` / `session_peek`). Reuse the same key across agents working the same decision so turns group together. Defaults to the tool name (`as… |
No output schema declared.
No examples provided.
ask_openrouter ~596
Ask ONE model on OpenRouter — a single gateway fronting ~400 models from every major lab (Anthropic, OpenAI, Google, DeepSeek, Meta, Qwen, Moonshot, xAI, Mistral, …) behind one API key. Use it to reach a model this server has no dedicated tool for, or to compare the same question across labs without configuring each provider separately. Guarded and single-turn, same scope rules as every other ask tool. PICK A MODEL FIRST: call `list_openrouter_models(task='…')` — the catalog is free and needs no key — then offer the user the ranked shortlist with its prices before spending anything. Omitting `model` uses the server default. `effort` is quick/standard/deep (default deep); because OpenRouter publishes each model's supported reasoning efforts, deep asks for the most the chosen model actually supports instead of guessing. COST: this bills the operator's OpenRouter credit per token, and the result reports the real dollar cost of the call. Prefer a dedicated tool when one exists for the same model — `ask` / `ask_opus5` (Claude on the operator's OAuth session, no per-token cost), `ask_grok`, `ask_kimi`, `ask_deepseek`. Grok and Kimi ids are rerouted to those local CLIs automatically when they are installed. Any model here also works in `ask_council`, `ask_chain`, and `ask_debate` as an 'openrouter:<model-id>' token.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional code snippets, file paths, or structural context. |
| context_ref | – | – | Key(s) of context saved with `context_write` to pull in and prepend to `context` — paste a big context ONCE, reference it by key here. Missing keys are reported, not fatal. |
| effort | string | – | Answer budget / reasoning depth (default 'deep' — max reasoning). 'quick' (~1k tokens, concise), 'standard' (~4k tokens), 'deep' (~16k tokens). Unlike Atlas, OpenRouter publishes each model's support… |
| model | string | – | OpenRouter model id (e.g. 'anthropic/claude-fable-5.1', 'openai/gpt-5.6-sol', 'deepseek/deepseek-v4-pro', 'google/gemini-3.8-flash'). Omit to use the server's default. Call `list_openrouter_models` t… |
| question | string | yes | A specific software/engineering question to ask an OpenRouter model. |
No output schema declared.
No examples provided.
ask_openrouter_council ~560
Ask SEVERAL OpenRouter models the same question in parallel, then have an adjudicator reconcile their answers into one. The point is cross-LAB diversity on a single API key: a panel of Claude + GPT + Gemini + DeepSeek disagrees in more useful ways than three models from one vendor, and you configure none of them separately. Same fan-out/synthesis contract and `consensus` signal as `ask_council`. `models` takes OpenRouter ids (the 'openrouter:' prefix is optional); omit it to use the configured set (`configure_openrouter_council`), else 3 featured catalog models, one per provider. The adjudicator defaults GPT-first: the local `codex` CLI when installed, else OpenRouter-hosted GPT-5.6 Sol, else Fable. COST: this is N billed calls plus a synthesis — reserve it for a contentious, hard-to-reverse decision, exactly as with `ask_council`. Grok and Kimi members reroute to the local CLIs when installed.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional code snippets, file paths, or structural context (shared by all models). |
| context_ref | – | – | Key(s) of context saved with `context_write` to pull in and prepend to `context` — paste a big context ONCE, reference it by key here. Missing keys are reported, not fatal. |
| models | array | – | OpenRouter model ids (e.g. ['anthropic/claude-fable-5.1', 'deepseek/deepseek-v4-pro']); an 'openrouter:' prefix is optional. Omit to use the configured set (configure_openrouter_council / ASK_FABLE_O… |
| question | string | yes | A specific software/engineering question to ask several OpenRouter models; the adjudicator (GPT-5.6 Sol by default) then synthesizes their answers into one. |
| session | string | – | Optional coordination key for the cross-agent hub (`session_list` / `session_peek`). Reuse the same key across agents working the same decision so turns group together. Defaults to the tool name (`as… |
| synthesizer | – | – | Model that reconciles the panel answers into one. Default ladder: the local codex CLI (GPT-5.6 Sol) when installed → 'openrouter:openai/gpt-5.6-sol' when OpenRouter is configured → 'fable'. |
No output schema declared.
No examples provided.
ask_opus5 ~631
The same guarded, multi-turn reasoning as `ask`, but on Claude Opus 5 (claude-opus-5) instead of Fable — identical arguments, identical result shape (sidecar, followup, context_exhausted), same `session`/`reset` conversation model. Reach for it exactly where you'd reach for `ask`: before guessing at unfamiliar code, when weighing a design trade-off, or to sanity-check a plan or diff. WHICH ONE: Opus 5 is roughly half Fable's price and noticeably faster, so prefer it for high-volume or latency-sensitive reasoning and for long back-and-forth sessions; keep `ask` (Fable) for the hardest, most consequential single calls. Running BOTH on the same question is a cheap two-model cross-check without paying for a full council. Sessions are namespaced per tool: the same `session` key on `ask` and `ask_opus5` is two independent conversations (use `reset_session(model='opus5')` to clear this one). The model has NO tools and CANNOT open files — paste the real code into `context` (or point at it with `context_ref`). Same scope as `ask`: broad and conceptual engineering questions, including brainstorming and ideas for future code, are fine; refused only for direct offensive-security asks (exploit development, attack tooling) and non-software domain knowledge (biology/medicine refused; neuroscience, cognitive science, AI/ML, and CS are in-scope). Opus 5 also works as the `opus` token in every multi-model mode — `ask_council` member or `synthesizer`, `ask_chain` stage, `ask_debate` proposer/opponent/adjudicator.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Optional code snippets, file paths, or structural context. |
| context_ref | – | – | Key(s) of context previously saved with `context_write` to pull in and prepend to `context` — so you paste a big codebase context ONCE and reference it by key across many asks instead of re-pasting.… |
| question | string | yes | A specific question about concrete software code/architecture (structure, functionality, data flow, module/function relationships, routing). |
| reset | boolean | – | Dump+clear this session before asking, starting a fresh conversation. |
| session | string | – | Conversation key. Reuse it to ask follow-ups (Opus 5 keeps context); use a new key or reset=true to start a fresh topic. Opus sessions are namespaced separately from `ask`'s Fable sessions, so the sa… |
| trusted | boolean | – | Operator-authorized. When true, the prohibited-use denylist runs in log-only mode: security vocabulary in the question is audited but does not block. Use for legitimate security-engineering work (PoC… |
No output schema declared.
No examples provided.
configure_atlas_council ~407
Save the user's chosen Atlas Cloud council (and optionally its adjudicator) so it sticks across sessions (written to ask_fable's config file, which overrides the ASK_FABLE_ATLAS_COUNCIL / ASK_FABLE_ATLAS_SYNTHESIZER env defaults). Pass `models` as the list of Atlas model ids `ask_atlas_council` should use by default (e.g. ['zai-org/glm-5.2','deepseek-ai/deepseek-v4-pro', 'moonshotai/kimi-k2']; an 'atlas:' prefix is optional). Optionally set `synthesizer` ('gpt' = the local GPT-5.6 Sol CLI, 'openai/gpt-5.6-sol' = the Atlas-hosted one, 'fable', …); omit it to keep the built-in ladder (local codex CLI → Atlas-hosted GPT-5.6 Sol → Fable). Confirm the selection with the user first — call `list_atlas_models` to ground it in the live catalog. Returns the saved config and its file path.
| Name | Type | Req | Description |
|---|---|---|---|
| models | array | – | Atlas Cloud model ids for the council (e.g. ['zai-org/glm-5.2','deepseek-ai/deepseek-v4-pro','moonshotai/kimi-k2']). An 'atlas:' prefix is optional. This becomes ask_atlas_council's default, persiste… |
| synthesizer | string | – | Optional: the model ask_atlas_council uses to reconcile the panel (e.g. 'gpt' for the local GPT-5.6 Sol CLI, 'openai/gpt-5.6-sol' for the Atlas-hosted one, or 'fable'). Omit to keep the built-in ladd… |
No output schema declared.
No examples provided.
configure_ollama_council ~329
Save the user's chosen Ollama Cloud council so it sticks across sessions (written to ask_fable's config file, which overrides the ASK_FABLE_OLLAMA_* env defaults). Pass `models` as the list of cloud model ids to use for `ask_ollama_council` and the `full` tier (e.g. ['minimax-m3:cloud', 'glm-5.2:cloud', 'qwen3-coder:480b-cloud']; an 'ollama:' prefix is optional and a bare name like 'minimax-m3' is normalized to 'minimax-m3:cloud'). Optionally set `default_model` for the single-model `ask_ollama` tool. Confirm the selection with the user first — call `list_ollama_models` to ground it in what's actually available. Returns the saved config and its file path.
| Name | Type | Req | Description |
|---|---|---|---|
| default_model | string | – | Optional: the single model `ask_ollama` uses when none is passed (e.g. 'gpt-oss:120b-cloud'). |
| models | array | – | Ollama Cloud model ids for the council (e.g. ['minimax-m3:cloud','glm-5.2:cloud','qwen3-coder:480b-cloud']). An 'ollama:' prefix is optional; a bare name like 'minimax-m3' is normalized to 'minimax-m… |
No output schema declared.
No examples provided.
configure_openrouter_council ~223
Persist the default panel for `ask_openrouter_council` (and optionally its adjudicator) to the server's config file, so the choice survives restarts without anyone hand-editing an env var. Pass `models` (OpenRouter ids) and/or `synthesizer` (any council token, or a bare OpenRouter id). Call `list_openrouter_models` first and let the user pick — this writes a durable default on their behalf, so it should reflect their choice, not yours.
| Name | Type | Req | Description |
|---|---|---|---|
| models | array | – | OpenRouter model ids to persist as the default council (e.g. ['anthropic/claude-fable-5.1', 'openai/gpt-5.6-sol', 'deepseek/deepseek-v4-pro']). Call `list_openrouter_models` first. |
| synthesizer | string | – | Model that adjudicates the panel — any council token ('codex'/'gpt', 'fable', 'openrouter:<model-id>') or a bare OpenRouter id. |
No output schema declared.
No examples provided.
configure_tracing ~246
Toggle reasoning-trace capture at runtime, persisted across sessions (writes ask_fable's config file, which overrides the ASK_FABLE_TRACE_MODE / ASK_FABLE_STREAM_REASONING env defaults — no ~/.claude.json edit or restart needed; it applies on the next call). `trace_mode='full'` records redacted model reasoning into traces and trace bundles (and saves answer markdown); 'safe' withholds reasoning content while structural traces still record. `stream_reasoning=true|false` turns live thinking on the server console on or off. Pass either or both. Returns the effective settings and the config path.
| Name | Type | Req | Description |
|---|---|---|---|
| stream_reasoning | boolean | – | Stream model thinking live to the ask_fable console as calls run (true) or off (false). Persisted; overrides ASK_FABLE_STREAM_REASONING. Streams to the server's own console, not into this tool result. |
| trace_mode | string | – | 'full' captures redacted model reasoning into traces and trace bundles (and saves answer markdown); 'safe' withholds reasoning content while structural traces still record. Persisted; overrides ASK_F… |
No output schema declared.
No examples provided.
context_delete ~44
Delete a stored context by `key` (housekeeping once a blob is no longer needed). Returns whether a row was removed.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Key to delete. |
No output schema declared.
No examples provided.
context_list ~57
List what's in the shared context store — each key with its size, age, and description (never the full value). Read-only. Reach for this to discover what context is already available to reference via `context_ref` before re-pasting.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
context_pack ~340
Point, don't paste. The reasoning models can't see your repo, but THIS server runs locally next to it — so instead of hand-pasting code, NAME the files (and optional line ranges) you want and let the server read them, apply a character budget, and store the bundle on the context bus under `key`. Then pass `context_ref='<key>'` on `ask` / councils exactly as usual. Each spec is `path` or `path:START-END` (1-indexed inclusive), relative to the configured project root; reads never escape that root, and `.git/`/`.env*` are refused. Requires an operator-configured project root (config `project_root` or the `ASK_FABLE_PROJECT_ROOT` env var) — returns `not_configured` if unset. Over-budget or unreadable specs are reported in `skipped` with a reason and `complete:false`; nothing is silently truncated, and if nothing can be packed the store is left untouched.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Stable key to store the packed bundle under; then pass context_ref='<key>' on `ask`. Reusing a key overwrites it. |
| max_chars | integer | – | Optional cap on total packed characters (default ~24000). Files that don't fit are reported in `skipped`, never silently truncated. |
| paths | array | yes | File specs to read from the configured project root — each a path relative to that root, optionally with a 1-indexed inclusive line range as `path:START-END` (e.g. 'src/app/db.py' or 'src/app/db.py:4… |
No output schema declared.
No examples provided.
context_read ~72
Read back context previously saved with `context_write`, by `key`. Returns the stored value plus its size, age, and description; `not_found` if the key isn't set. Use it to inspect a shared blob, or to consume context another agent wrote.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | Key to read back. |
No output schema declared.
No examples provided.
context_write ~239
Store a chunk of context (code, file contents, a stack trace, design notes) under a stable `key` so you paste it ONCE and reuse it. Then pass `context_ref='<key>'` on `ask` to pull it in instead of re-pasting the same code into every call — the big lever against the re-paste tax, since the model can't see your repo. The store is shared by every agent on this server, so a sibling agent can `context_read` what you wrote. Reusing a key overwrites it. Give a one-line `description` so it shows usefully in `context_list`.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Optional one-line note about what this holds (shown in context_list). |
| key | string | yes | Stable key to store this context under (e.g. 'repo:auth', 'ticket-431/stacktrace'). Reusing a key overwrites it. |
| value | string | yes | The context to store — code, file contents, a stack trace, design notes. Paste it ONCE here, then reference it by key via `context_ref` on `ask`. |
No output schema declared.
No examples provided.
list_atlas_models ~334
RECOMMEND AND PICK an Atlas Cloud text model. When the user asks for the best Atlas model(s) for a job, pass that job as `task`; the tool ranks the live catalog and opens a native model + effort selection popup when the MCP client supports form elicitation, with a structured picker fallback otherwise. Returns the live catalog (no auth needed; free, no tokens charged) as a ready-to-render menu: task-ranked `recommendations`, `featured` (~8 curated models, HOT/NEW-tagged, one per provider), the full `menu` (each with model_id, label, cost_note like '$2/$6 per M', provider, tags, context length, latency), and `effort_choices` (quick/standard/deep). REACH FOR THIS the first time an Atlas model is wanted. If `selection.action` is `accept`, call `ask_atlas` with the selected model and effort; if native elicitation is unavailable, show `picker` with the host's selection UI. Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| interactive | boolean | – | When a task is supplied, open a native model + effort picker if the MCP client supports form elicitation; otherwise return picker JSON. |
| limit | integer | – | Maximum task-matched models to offer. |
| refresh | boolean | – | Fetch the live Atlas Cloud text-model catalog (no auth needed). When false, only report the effort choices (no network). |
| task | string | – | Optional job to rank the live Atlas catalog for, such as 'debug a large Rust repository' or 'cheap low-latency support chat'. |
No output schema declared.
No examples provided.
list_ollama_models ~189
List the Ollama Cloud models available to put in the council, so you can offer the user a real, concrete choice instead of guessing. Returns the live ollama.com catalog (GLM, MiniMax-M3, Qwen, Kimi, DeepSeek, Nemotron, Mistral, gpt-oss, …) as daemon-ready ids, the models already pulled locally (certain to run right now), and the council that's currently configured. REACH FOR THIS the first time an Ollama council is wanted or when the user asks to configure ask_fable: call this, show the options, ask which they want, then persist the choice with `configure_ollama_council`. Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| refresh | boolean | – | Fetch the live ollama.com catalog + locally-pulled models. When false, only report the currently-configured council (no network). |
No output schema declared.
No examples provided.
list_openrouter_models ~303
List the live OpenRouter catalog — ~400 models with price per million tokens, context window, and which reasoning efforts each one accepts. FREE: the catalog endpoint needs no API key and costs nothing, so call it before `ask_openrouter` rather than guessing a model id. Pass `task='…'` to rank a provider-diverse shortlist for that job; ranking reads the catalog's own fields (reasoning support, context length, price, release date), so a model released today ranks correctly with no update here. A task mentioning cheap/fast/high-volume flips the ranking toward the cheap and free tiers; otherwise it leads with capable models. Show the user the shortlist with prices and let them choose — do not silently pick an expensive model on their behalf.
| Name | Type | Req | Description |
|---|---|---|---|
| interactive | boolean | – | When a task is supplied, open a native model + effort picker if the MCP client supports form elicitation; otherwise return picker JSON. |
| limit | integer | – | Maximum task-matched models to offer. |
| refresh | boolean | – | Fetch the live OpenRouter catalog (no auth needed). When false, only report the effort choices (no network). |
| task | string | – | Optional job to rank the live catalog for, such as 'debug a large Rust repository' or 'cheap high-volume summarizing'. Ranking uses the catalog's own data (reasoning support, context length, price, r… |
No output schema declared.
No examples provided.
reset_session ~118
Dump (optionally to a file) and clear a Fable conversation session, so the next `ask` on that key starts a fresh topic.
| Name | Type | Req | Description |
|---|---|---|---|
| model | string | – | Which tool's conversation to clear: 'fable' for `ask`, 'opus5' (or 'opus') for `ask_opus5`. The two tools namespace their sessions separately, so the same key names two independent conversations. |
| save | boolean | – | Write the transcript to a file before clearing. |
| session | string | – | Session key to clear. |
No output schema declared.
No examples provided.
session_list ~230
COORDINATION — the operator dashboard. Lists ask_fable sessions across instances on this machine (opencode / Claude Code / salient windows) so you can see what other agents are asking the oracles. Each entry shows session key, agent_id, latest question, oracle, status, heartbeat age, and turn count. Defaults: THIS project only, and `active_only: true` (hide sessions with no heartbeat in ~5 min — the stale threshold). Pass `active_only: false` for retained history, `all_projects: true` for the whole machine. Use it to avoid duplicate work or watch the live fleet. Read-only, makes no model call. Visibility-only — never affects oracle answers; oracles only see what a calling agent explicitly passes in `question`/`context`.
| Name | Type | Req | Description |
|---|---|---|---|
| active_only | boolean | – | Only sessions with a recent heartbeat (not stale). Default true so the dashboard shows live work. Pass false to include retained history. |
| all_projects | boolean | – | Show sessions from ALL projects on this machine, not just the current one. |
| limit | integer | – | – |
No output schema declared.
No examples provided.
session_peek ~137
COORDINATION — read the full turn history (every question and answer, in order) for one session, across instances. Use it to understand what an agent has learned in a session before joining the work, or to recover a finding another instance produced. Optionally scope to one `agent_id`. Returns the complete conversation bounded by retention. Read-only, makes no model call. Like `session_list`, this is visibility-only — it never feeds back into an oracle's context.
| Name | Type | Req | Description |
|---|---|---|---|
| agent_id | string | – | Optional: restrict to one agent's turns on that session. |
| session_key | string | yes | The session label to inspect. |
No output schema declared.
No examples provided.
session_stats ~208
COORDINATION — aggregated oracle usage across ALL instances on this machine (unlike `stats`, which only sees the current instance's audit log). Turn counts (by status/oracle/agent) default to the last 24h (`window_s: 86400`); pass `window_s: 0` for all retained history. Also returns `fresh_sessions` (heartbeat within the stale window) vs `total_sessions`, plus `attributed_turns` / `unknown_turns`. Defaults to this project; `all_projects: true` for the whole machine. Use it to answer 'which agents are burning the most oracle calls?' or 'how is the fleet doing today?'. Read-only, makes no model call.
| Name | Type | Req | Description |
|---|---|---|---|
| all_projects | boolean | – | Aggregate across all projects on this machine, not just the current one. |
| window_s | integer | – | Only count turns from the last N seconds. Default 86400 (24h). Pass 0 for all retained history. |
No output schema declared.
No examples provided.
stats ~311
Read-only usage/health stats aggregated from the ask_fable audit log — see how the tools are performing without spelunking JSONL. Buckets every recorded call over a time `window` ('1h' | '24h' | '7d' | 'all', default '24h') `by` 'model', 'session', or 'day', reporting calls / allowed / refused / errors, avg and p95 latency, and error_rate per bucket plus totals. Optional `model` / `session` filters narrow to one backend or workflow. Council/chain records also carry quorum, consensus, and synth_fallback in the log. Use it to answer things like 'is GLM erroring a lot today?' or 'how slow are councils this week?'. Makes no model call and is never cached.
| Name | Type | Req | Description |
|---|---|---|---|
| by | string | – | Bucket key. 'model' attributes a call to the model that answered (a council to its synthesizer); 'provider' is per backend call — the only view that sees council/chain/debate members one by one, and… |
| model | string | – | Only include records for this model label. |
| session | string | – | Only include records for this session key. |
| window | string | – | How far back to aggregate: '1h', '24h', '7d', or 'all'. |
No output schema declared.
No examples provided.
trace_get ~43
Read the ordered events and artifact references for one trace.
| Name | Type | Req | Description |
|---|---|---|---|
| include_content | boolean | – | – |
| max_chars | integer | – | – |
| trace_id | string | yes | – |
No output schema declared.
No examples provided.
trace_list ~66
List recent correlated tool traces without raw content.
| Name | Type | Req | Description |
|---|---|---|---|
| before | string | – | – |
| limit | integer | – | – |
| project | string | – | – |
| provider | string | – | – |
| session | string | – | – |
| status | string | – | – |
| tool | string | – | – |
No output schema declared.
No examples provided.
What is the ask-fable MCP server?
ask-fable is an MCP server listed in the public MCP registry as io.github.baggybin/ask-fable. MCP server for Anthropic's Claude Fable, Opus 5, and multi-model reasoning councils. This page covers its PyPI package (ask-fable).
Is the ask-fable MCP server safe to use?
ask-fable scores 69 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the ask-fable MCP server expose?
ask-fable exposes 38 tools: ask, ask_fable_help, ask_opus5, ask_m3, ask_glm, and 33 more. Their descriptions and schemas cost roughly 14,552 tokens of context every time the server is loaded.
Is the ask-fable MCP server still maintained?
ask-fable is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.