Skip to main content
Glama

Grimoire

Offensive knowledge, offline. One search box for every playbook.

by Penthertz - part of the RF-Swift toolkit

CI

Grimoire clones a curated set of security knowledge bases, indexes all of their markdown/YAML into a single full-text search index, and serves a fast web UI. Type ssrf, xss, sql, kerberoast, sudo, jwt, ... and it instantly surfaces the matching pages across every source - HackTricks, PayloadsAllTheThings, the OWASP guides, the living-off-the-land databases, and your own notes - with a link back to each original.

Built to run anywhere (single Python script, no mandatory services) and to be embedded in RF-Swift.

  GRIMOIRE   offensive knowledge, offline
  > ssrf_   ->  HackTricks . PayloadsAllTheThings . WSTG . API Top 10 ...

Features

  • Unified search over 20+ sources via SQLite FTS5 with BM25 ranking - one query language regardless of how each repo is authored (mdBook, mkdocs, Jekyll, Hugo, plain markdown, YAML).

  • Fully offline once fetched. No telemetry, no external calls at runtime.

  • Spawnable web service - grimoire.py serve (bind host/port; run it in the background or as a container service).

  • Provenance - every doc shows its source and a link to the original file on GitHub, so you always know where guidance came from.

  • Rich rendering - markdown, reStructuredText (.rst, via docutils - so Sphinx sources like PySDR render as documents, not raw directives), Jupyter notebooks and PDFs all render to HTML; images display and relative .md/.rst links navigate inside the viewer (relative <img>/links are rewritten to a guarded /asset / /doc endpoint). Note: for sparse sources (e.g. Ghidra), images stored outside the checked-out paths won't be present - widen the source's sparse: list if needed.

  • Copy-ready - one-click copy buttons on every code/command block.

  • OSINT note - OSINT tools mostly target individuals; scope and document collection to what an engagement justifies (GDPR), especially for named people.

  • Obsidian-friendly - point it at your vault; [[wikilinks]], #tags and YAML frontmatter are handled (links/tags become one-click searches).

  • Bring your own docs - drop markdown in custom/ or register a local path.

  • Optional native builds - render a source's own mdBook/mkdocs site when the toolchain is present; search never depends on it.

  • Attach an AI model (MCP) - grimoire.py mcp exposes the index over the Model Context Protocol, so Claude / Codex / Gemini / any MCP client can search, read docs, build source-backed technical checklists, assemble a topic's reads into a complete cited tutorial, and review whether the docs are current / find better techniques. It also adapts to your engagement context (targets, interfaces, hardware/SDRs, SIM, RF) so suggestions fit your assessment. Default read mode is read-only (no shell, no writes); opt into --mode assist|auto to let it detect/install missing tools (RF-Swift recipe, else the host package manager) and run steps, behind a destructive-command denylist and a target scope. See docs/MCP_TUTORIAL.md.

Related MCP server: Grimoire

Sources

Curated in sources.yaml, grouped by category:

Category

Sources

wikis

HackTricks, HackTricks Cloud, PayloadsAllTheThings, The Hacker Recipes, six2dez Pentest Book, RedTeam-Tools, Awesome Cybersecurity Handbooks

ad-internal

InternalAllTheThings, ired.team, OCD mindmaps

c2

Sliver

hardware-iot

HardwareAllTheThings

mobile

OWASP MASTG, OWASP MASVS

web-api

OWASP WSTG, Cheat Sheet Series, ASVS, API Security Top 10

lotl

GTFOBins, LOLBAS, GTFOArgs, LOLDrivers, LOOBins, WADComs

re-books

mytechnotalent/Reverse-Engineering, Nightmare, how2heap (drop a PDF book in custom/ to add one)

re-tools

radare2book, rizin book, angr docs, Ghidra (in-tree docs)

re-indexes

Awesome-Reversing (ReversingID + tylerha97), reverse-engineering (wtsxDev), Awesome Malware Analysis, Awesome Android RE

firmware

Awesome Firmware Security

osint

awesome-osint (jivoi), OSINT Framework (JSON tree), OSINT Collection, Awesome-OSINT-List, osint_stuff_tool_collection, sinwindie/OSINT, Trace Labs awesome-osint

dfir

awesome-forensics, awesome-incident-response, awesome-memory-forensics, ForensicArtifacts, KapeFiles, CERT-SG IRM, PagerDuty IR, IR-plan-template, Velociraptor, Volatility 3, plaso, Dissect

glitching

findus/fault-injection-library, ChipWhisperer (+ Jupyter Fault101/201), ChipSHOUTER-PicoEMP, Faulty Cat, SimpleLink-FI, PicoGlitcher-LPC1343

bluetooth

awesome-bluetooth-security, BlueToolkit, Sniffle, Ubertooth, InternalBlue, SweynTooth, BrakTooth, KNOB/BIAS/BLUFFS, Mirage, BtleJack, bleah, OpenHaystack, Continuity, apple_bleee, BLE CTF

wifi

awesome-wifi-security, 0xor0ne awesome-list, MacStealer/FragAttacks/KRACK (Vanhoef), Dragonslayer/Dragondrain/Dragonforce, hcxdumptool/hcxtools, aircrack-ng, AngryOxide, airgeddon, eaphammer, hostapd-mana, wifipumpkin3, DragonShift, WiFiChallengeLab

sdr

PySDR, ThinkDSP, SDR-for-Engineers (lectures+labs), SDRangel, SDR++, inspectrum, URH, liquid-dsp, mhostetter/sdr, scikit-dsp-comm, CommPy, SoapySDR, learnSDR

compliance

awesome-compliance, NIST OSCAL, OWASP SAMM (NIST PDFs / CIS / SCF crosswalk / CCM / SANS / ANSSI-EBIOS / NIS2-DORA-CRA / CNIL / CISO Assistant = drop-in or run-the-tool)

Install & run

Install as a CLI with pipx (recommended) or pip - this puts grimoire on your PATH:

pipx install .           # (from a checkout)

grimoire all                          # clone every source + build the index
grimoire serve                        # http://127.0.0.1:8000
grimoire mcp                          # attach an AI model over MCP

When installed, user state (the editable sources.yaml, custom/, and the data/ index) lives in $GRIMOIRE_HOME (default ~/.local/share/grimoire); the manifest is seeded from a packaged default on first run, and refreshed automatically on upgrade as long as you haven't edited it yourself. Manage it with grimoire sources (--reset to restore the official default, --from FILE to import your own).

Or run straight from a checkout (no install):

pip install -r requirements.txt    # PyYAML + markdown
./grimoire.py all                  # clone every source + build the index
./grimoire.py serve                # http://127.0.0.1:8000

See docs/QUICKSTART.md for the day-to-day commands and search tips.

Commands

Command

What it does

fetch [--only N...] [--prune-git]

git clone/pull sources into data/sources/ (keeps .git for fast incremental updates; --prune-git drops it to save ~40% space)

build

optional native mdBook/mkdocs render into data/build/

index [--force]

incremental FTS5 index at data/index.db (only re-indexes sources whose git commit / content changed; --force = full rebuild)

serve [--host H --port P]

start the web search UI

all [--only N...]

fetch + index

update [--only N...]

refresh docs: fetch + index (alias of all)

clean [--sources|--all]

drop the search index (--sources also removes cloned repos/builds; --all wipes data/)

sources [--reset|--from FILE]

show the active manifest, restore the official default, or import one

mcp

expose Grimoire over MCP (stdio) so an AI model can attach

Docs can also be refreshed live from the web UI with the Update docs button (runs a background fetch + reindex and streams progress).

Code layout (MVC)

The entrypoint grimoire.py is a thin launcher; the implementation lives in the grimoire_app/ package, split cleanly:

Module

Responsibility

config.py

filesystem paths + indexing constants (single source of truth)

model.py

data: sources manifest, fetch, index, the Index store + search

view.py

rendering: markdown/obsidian/pdf/notebook -> safe HTML, CSP'd pages

controller.py

HTTP handler + CLI commands wiring model and view together

mcp.py

the MCP server (search/docs/checklist/tutorial/review tools + prompts)

context.py

engagement context (targets, hardware, SIM, RF) for the MCP layer

runner.py

gated execution: env detect, install resolver, command runner

The package also ships web/ (the UI) and sources.default.yaml (the seed manifest), so a pip/pipx install is self-contained.

All SQL is funnelled through model.Index, where every statement is parameterized (values are bound, never string-formatted), and free-text queries pass through _fts_query (alphanumeric prefix tokens only) before reaching a MATCH expression - so a poisoned query can break out of neither the SQL nor the FTS5 grammar. Rendered markdown is sanitized with nh3 beneath a strict CSP nonce (two XSS layers). The test suite includes dedicated SQLi, XSS, SSTI, CSRF, clickjacking, path-traversal, source-name-traversal, exec-scope-bypass, and MCP-DoS cases (python3 -m unittest), run in CI across Python 3.9-3.12.

How it works

  • fetch shallow-clones each sources.yaml repo into data/sources/<name>, sparse-checking-out only a source's docs_dir subtree when one is set - so a huge tool repo never lands whole on disk. .git is kept by default so update can git pull incrementally; pass --prune-git (or set GRIMOIRE_PRUNE_GIT=1) to drop it and reclaim ~40% of each checkout (the doc viewer and the GitHub origin links don't need it), at the cost of re-cloning on the next fetch. Ideal when baking a never-updated offline/RF-Swift image.

  • index walks every *.md / *.markdown / *.mdx / *.rst / *.yml / *.yaml file (.rst so Sphinx-documented projects contribute their full docs, not just the README) and stores it in a SQLite FTS5 table (data/index.db) with BM25 ranking. This is the unified layer: all sources, one query, regardless of authoring format. A source can pull extra extensions with index_ext: (e.g. .ipynb, .json) and, to dump the maximum, sources are indexed whole unless a docs_dir:/sparse: is set to scope a huge repo.

  • serve is a dependency-free http.server exposing the UI plus a small API:

    • GET / search UI

    • GET /api/search?q=&cat= ranked JSON results (with highlighted snippets)

    • GET /api/sources categories for the filter chips

    • GET /doc?src=&path= renders a doc (markdown -> HTML) with an origin banner, copy buttons and Obsidian link/tag handling

  • build (optional) runs mdbook/mkdocs when available for pixel-perfect browsing; the index always reads raw markdown so the tool works without it.

Add your own docs

Both are picked up by grimoire.py index:

  1. Drop-in - put markdown in custom/ (indexed as source custom).

  2. Registered path / Obsidian vault - add to sources.yaml:

    - name: my-vault
      title: My Vault
      type: local
      path: /home/me/ObsidianVault
      category: custom

Embedding in RF-Swift

Grimoire is the grimoire.py launcher + the grimoire_app/ package + manifest

  • web dir, with no required services (stdlib sqlite3 / http.server; just PyYAML + markdown). To bake an offline knowledge base into an image: run fetch + index at build time, ship data/index.db (and data/sources/ for the doc viewer), then grimoire.py serve as a runtime command.

Security

See docs/SECURITY.md for the threat model, the controls (parameterized SQL, CSP/XSS, path-traversal and doc-extension allowlists, tool-name and git-URL validation, default-off execution), and the residual risks you must understand before exposing serve or enabling MCP --mode assist|auto.

License & attribution

Grimoire's own code is released under the MIT License (see LICENSE).

The license covers Grimoire itself only. Grimoire aggregates and indexes third-party documentation; each source keeps its own license and authorship, and is cloned at runtime rather than redistributed here. The origin banner in the viewer links back to the upstream repository for every document. Review and respect each project's license before redistribution.

Available Tools

9 tools
grimoire_categoriesB

List the available source categories and their sources.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states 'List' implying a read operation, but no details on authentication, rate limits, or what 'categories' and 'sources' refer to.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, clear and direct. No extraneous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a parameterless tool with no output schema, but lacks context on what constitutes a 'source category' and how this integrates with sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no parameters and coverage is 100%. With 0 parameters, description adds value by naming the specific output: 'available source categories and their sources'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'available source categories and their sources'. It distinguishes from sibling tools like grimoire_search which are more specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. Sibling tools like grimoire_search and grimoire_fetch_doc suggest different purposes, but conditions for choosing this tool are not explained.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grimoire_checklist_materialA

Gather grounded source material for a technical checklist on a topic: runs several targeted searches and returns the matching documentation snippets with citations. Feed this to build a concrete, source-backed checklist.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYese.g. 'web API pentest', 'active directory privesc', 'BLE assessment'
categoryNooptional category filter

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses the tool performs 'several targeted searches' and returns snippets with citations, indicating a read-only behavior. However, it lacks specifics on the number of searches, scope, authentication requirements, or potential side effects, falling short of full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at two sentences. The first sentence front-loads the core action and output, and the second sentence ties it to a concrete use case. Every word is purposeful with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's purpose, input parameters, output type, and usage context. Given no output schema, it adequately explains return values. It lacks details on pagination, limits, or error conditions, but these are not critical for a simple search-like tool, making it fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters ('topic' with examples, 'category' as optional filter). The description adds minimal value by stating 'several targeted searches' implying topic usage, but does not elaborate on parameter meanings or relationships beyond schema, earning a baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('gather') and resource ('source material for a technical checklist'), clearly distinguishing it from siblings like grimoire_search (general search) and grimoire_topic_material. It also states the output format ('documentation snippets with citations') and subsequent use case, providing unambiguous purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for building a checklist by gathering source material, but does not explicitly state when to use this tool versus alternatives like grimoire_search or grimoire_topic_material. No exclusions or when-not scenarios are provided, leaving the agent to infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grimoire_contextA

Return the engagement context for THIS assessment: operator-declared targets/IPs, interfaces, hardware, SIM/telecom and RF parameters, plus host-detected interfaces, USB devices and SDRs. Read this first and tailor every step and command to the actual targets and hardware in scope.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full burden. It indicates a read-only operation returning data, but does not mention any prerequisites, side effects, or required permissions. For a simple context retrieval, this is adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no extraneous words. The first sentence lists what is returned, and the second gives clear usage direction. Perfectly front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and no output schema, the description fully covers what the tool does and how to use it. It explains the content and importance of reading it first, which is sufficient for a zero-parameter context tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema provides no information. The description adds significant value by detailing the contents of the returned context (targets, interfaces, hardware, etc.), meeting the baseline of 4 and exceeding it with rich output description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns engagement context for the assessment, listing specific items (operator-declared targets/IPs, interfaces, hardware, parameters, host-detected devices). This distinctly sets it apart from sibling tools like grimoire_search or grimoire_env.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to 'Read this first and tailor every step and command to the actual targets and hardware in scope,' providing clear when-to-use context. It does not list exclusions or alternatives, but the sibling list implies this is the primary context retrieval tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grimoire_envA

Detect the runtime environment: whether this is an RF-Swift container, the OS and package manager, whether RF-Swift install scripts are reachable, and root/sudo availability. Use this to decide how to install tools.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavior. It explains what is detected but does not mention potential side effects (likely none), required permissions, or that it is a read-only operation. Provides sufficient but not exhaustive transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no unnecessary words. It front-loads the purpose and ends with usage guidance, efficiently conveying all necessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description lists the detected items (container, OS, etc.) but does not explicitly state the return format (e.g., JSON keys). For a simple detection tool, this is nearly complete, as the agent can infer structure from the listed attributes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters (empty object), so schema coverage is 100%. The description adds no parameter info (none needed) but lists the detected environment attributes, effectively describing the output.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool detects runtime environment details (container, OS, package manager, install script reachability, root/sudo availability) and its purpose is to inform installation decisions, distinguishing it from sibling tools like grimoire_which.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this to decide how to install tools', providing clear context. It doesn't state when not to use or list alternatives, but it effectively guides the agent towards usage before installation tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grimoire_fetch_docA

Return the full text of one indexed document (markdown, notebook converted to markdown, or extracted PDF text). Use the source+path from a grimoire_search result to read the whole page before answering.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYessource name from a search result
pathYesrelpath from a search result

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully convey behavioral traits. It only describes the return value and usage, omitting side effects, idempotency, authentication needs, rate limits, or any other non-obvious behaviors. This is insufficient for a tool with no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The first sentence states the purpose, the second gives usage guidance. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter retrieval tool with no output schema, the description adequately covers input, output, and usage context. Minor omissions like error handling or file size limits are forgivable given the low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with meaningful property descriptions. The description reinforces that the parameters come from a grimoire_search result but adds little extra semantic value beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the full text of one indexed document, specifying document types (markdown, notebook, PDF). It distinguishes itself from sibling tools like grimoire_search by telling the agent to use source+path from a search result, making the purpose and relationship explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use source+path from a grimoire_search result, providing clear when-to-use guidance. It does not offer when-not-to-use info or alternatives beyond mentioning the predecessor, but the context is sufficient for typical use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grimoire_plan_installA

Resolve HOW a missing tool would be installed (RF-Swift script recipe first, then the host package manager) and return the ordered commands - WITHOUT running anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full transparency burden. It clearly states it does NOT run anything (safety), returns ordered commands, and outlines the algorithm (RF-Swift script recipe first, then package manager). However, it does not mention error handling or response format (no output schema).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It efficiently conveys purpose, approach, and non-execution side effect.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple schema (1 param, no enums, no output schema), the description covers the main behavior and algorithm. However, it lacks parameter details and any mention of prerequisites or edge cases (e.g., tool already installed). It is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter 'tool' is a string with 0% schema description coverage. The description does not explain what 'tool' expects (e.g., name, path, identifier). It says 'missing tool' implying tool name, but this is insufficient. The parameter meaning should be explicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Resolve HOW a missing tool would be installed' and specifies the ordered approach (RF-Swift script recipe first, then host package manager). It also explicitly states it does not execute anything, distinguishing it from potential installation siblings. The verb 'resolve' and object 'how a missing tool would be installed' are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly tells when to use (when you need to know the installation plan without running) but does not explicitly compare with sibling tools like grimorie_which (which might check installation status) or other grimorie tools. There is no when-not-to-use guidance or alternative mentions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grimoire_topic_materialA

Assemble a broad reading set for a topic: runs a wide sweep of related searches across the whole corpus and returns the deduped matching docs with citations. Use this to write a complete, source-backed tutorial. Pair with grimoire_fetch_doc to read the most relevant pages in full.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYese.g. 'kerberoasting', 'BLE sniffing with Sniffle', 'GPS spoofing'
categoryNooptional category filter

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries burden. Discloses that it runs wide sweep, returns deduped docs with citations. No contradictions; not exhaustive but reasonable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences: core function, use case, pairing. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description specifies returns 'deduped matching docs with citations'. Sufficient for a simple tool with two parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so schema already describes parameters. Description adds context about 'broad reading set' but no extra detail on parameters beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it assembles a broad reading set for a topic, runs related searches, and returns deduped matching docs with citations. It distinguishes from siblings by pairing with grimoire_fetch_doc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this to write a complete, source-backed tutorial' and pairs with grimoire_fetch_doc. Lacks explicit when-not-to-use or alternatives, but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grimoire_whichB

Check whether a tool/binary is installed and where.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose all behavioral traits. It only states the basic function without detailing return format, error handling (e.g., if tool not found), permissions, or side effects. This is insufficient for full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no redundant words. It efficiently conveys the tool's purpose without extraneous information, making it quick to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one param, no output schema), the description is nearly adequate. However, it omits the return value description, which is critical for an agent to understand the tool's output. A complete description should mention whether it returns a path or boolean, for example.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds 'tool/binary' as context for the 'tool' parameter, but lacks details on expected format, examples, or constraints beyond type string. This provides minimal added value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Check' and the resource 'tool/binary', specifying both the action (check installation) and the scope (where). It distinguishes from sibling tools that cover categories, environment, documentation, etc., by focusing on installation status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like grimoire_env or grimoire_search. The description does not mention prerequisites, context dependencies, or exclusion criteria, leaving the agent to infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: listing categories, gathering checklist material, returning context, detecting environment, fetching full documents, planning installation, searching, assembling topic material, and checking tool installation. There is no overlap in functionality.

Naming Consistency5/5

All tools follow the consistent pattern 'grimoire_<descriptive_noun>', making it easy to infer their purpose from the name. The naming is predictable and uniform across the set.

Tool Count5/5

With 9 tools, the server is well-scoped for a knowledge base assistant. Each tool covers a specific aspect of querying and utilizing offline security resources, without unnecessary duplication or bloat.

Completeness5/5

The tool set covers the full workflow: searching, retrieving documents, gathering material for checklists and tutorials, detecting environment, planning installations, and providing context. There are no obvious gaps for an agent to fail.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides instant access to authoritative security documentation from organizations like OWASP, NIST, and major cloud providers through natural language semantic search. It enables users to retrieve security best practices, frameworks, and vulnerability information directly from a locally cached knowledge base.
    4
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A local security knowledge base that indexes documentation like CVEs and CWEs using hybrid keyword and semantic search. It enables LLM agents to query indexed materials via MCP for accurate, offline retrieval during security audits and code reviews.
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Exposes the MITRE ATT\&CK framework to LLMs and AI assistants via the Model Context Protocol, enabling querying of techniques, tactics, groups, software, and mitigations.
    9
    13
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/PentHertz/grimoire'

If you have feedback or need assistance with the MCP directory API, please join our Discord server