grimoire
The Grimoire server exposes an offline, unified security knowledge base (20+ sources: HackTricks, PayloadsAllTheThings, OWASP guides, LOTL databases, and more) over the Model Context Protocol, enabling AI models to search, read, and reason over security documentation grounded in real sources.
Full-text search (
grimoire_search): Search ranked matches with snippets, source, category, and path across all indexed security knowledge bases, filterable by category (e.g.,web-api,lotl,bluetooth,sdr).Fetch full documents (
grimoire_fetch_doc): Retrieve the complete text of any indexed document (markdown, Jupyter notebook, or PDF) using a source+path from a search result.List source categories (
grimoire_categories): Enumerate all available source categories and their constituent sources.Read engagement context (
grimoire_context): Access operator-declared assessment details — targets/IPs, network interfaces, hardware, RF parameters, and detected USB/SDR devices — to tailor recommendations.Gather checklist material (
grimoire_checklist_material): Run targeted multi-searches on a topic and return cited documentation snippets to construct source-backed technical checklists.Assemble topic reading sets (
grimoire_topic_material): Perform a broad sweep of related searches for a topic and return deduplicated, cited docs to build comprehensive tutorials.Detect runtime environment (
grimoire_env): Check OS, package manager, RF-Swift container status, and root/sudo availability to inform tool installation strategies.Check tool availability (
grimoire_which): Verify whether a specific binary is installed and report its location.Plan tool installation (
grimoire_plan_install): Resolve and return ordered install commands (RF-Swift recipe first, then host package manager) without executing anything.
Integrates with Obsidian vaults, enabling indexing and searching of markdown notes with wikilink, tag, and YAML frontmatter support.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@grimoiresearch for kerberoasting techniques and tools"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Grimoire
Offensive knowledge, offline. One search box for every playbook.
by Penthertz - part of the RF-Swift toolkit
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/.rstlinks navigate inside the viewer (relative<img>/links are rewritten to a guarded/asset//docendpoint). Note: for sparse sources (e.g. Ghidra), images stored outside the checked-out paths won't be present - widen the source'ssparse: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]],#tagsand 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 mcpexposes 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. Defaultreadmode is read-only (no shell, no writes); opt into--mode assist|autoto 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 |
| HackTricks, HackTricks Cloud, PayloadsAllTheThings, The Hacker Recipes, six2dez Pentest Book, RedTeam-Tools, Awesome Cybersecurity Handbooks |
| InternalAllTheThings, ired.team, OCD mindmaps |
| Sliver |
| HardwareAllTheThings |
| OWASP MASTG, OWASP MASVS |
| OWASP WSTG, Cheat Sheet Series, ASVS, API Security Top 10 |
| GTFOBins, LOLBAS, GTFOArgs, LOLDrivers, LOOBins, WADComs |
| mytechnotalent/Reverse-Engineering, Nightmare, how2heap (drop a PDF book in |
| radare2book, rizin book, angr docs, Ghidra (in-tree docs) |
| Awesome-Reversing (ReversingID + tylerha97), reverse-engineering (wtsxDev), Awesome Malware Analysis, Awesome Android RE |
| Awesome Firmware Security |
| awesome-osint (jivoi), OSINT Framework (JSON tree), OSINT Collection, Awesome-OSINT-List, osint_stuff_tool_collection, sinwindie/OSINT, Trace Labs awesome-osint |
| awesome-forensics, awesome-incident-response, awesome-memory-forensics, ForensicArtifacts, KapeFiles, CERT-SG IRM, PagerDuty IR, IR-plan-template, Velociraptor, Volatility 3, plaso, Dissect |
| findus/fault-injection-library, ChipWhisperer (+ Jupyter Fault101/201), ChipSHOUTER-PicoEMP, Faulty Cat, SimpleLink-FI, PicoGlitcher-LPC1343 |
| awesome-bluetooth-security, BlueToolkit, Sniffle, Ubertooth, InternalBlue, SweynTooth, BrakTooth, KNOB/BIAS/BLUFFS, Mirage, BtleJack, bleah, OpenHaystack, Continuity, apple_bleee, BLE CTF |
| 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 |
| PySDR, ThinkDSP, SDR-for-Engineers (lectures+labs), SDRangel, SDR++, inspectrum, URH, liquid-dsp, mhostetter/sdr, scikit-dsp-comm, CommPy, SoapySDR, learnSDR |
| 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 MCPWhen 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:8000See docs/QUICKSTART.md for the day-to-day commands and search tips.
Commands
Command | What it does |
| git clone/pull sources into |
| optional native mdBook/mkdocs render into |
| incremental FTS5 index at |
| start the web search UI |
|
|
| refresh docs: |
| drop the search index ( |
| show the active manifest, restore the official default, or import one |
| 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 |
| filesystem paths + indexing constants (single source of truth) |
| data: sources manifest, fetch, index, the |
| rendering: markdown/obsidian/pdf/notebook -> safe HTML, CSP'd pages |
| HTTP handler + CLI commands wiring model and view together |
| the MCP server (search/docs/checklist/tutorial/review tools + prompts) |
| engagement context (targets, hardware, SIM, RF) for the MCP layer |
| 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.yamlrepo intodata/sources/<name>, sparse-checking-out only a source'sdocs_dirsubtree when one is set - so a huge tool repo never lands whole on disk..gitis kept by default soupdatecangit pullincrementally; pass--prune-git(or setGRIMOIRE_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/*.yamlfile (.rstso 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 withindex_ext:(e.g..ipynb,.json) and, to dump the maximum, sources are indexed whole unless adocs_dir:/sparse:is set to scope a huge repo.serve is a dependency-free
http.serverexposing the UI plus a small API:GET /search UIGET /api/search?q=&cat=ranked JSON results (with highlighted snippets)GET /api/sourcescategories for the filter chipsGET /doc?src=&path=renders a doc (markdown -> HTML) with an origin banner, copy buttons and Obsidian link/tag handling
build (optional) runs
mdbook/mkdocswhen 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:
Drop-in - put markdown in
custom/(indexed as sourcecustom).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; justPyYAML+markdown). To bake an offline knowledge base into an image: runfetch+indexat build time, shipdata/index.db(anddata/sources/for the doc viewer), thengrimoire.py serveas 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 toolsgrimoire_categoriesB
List the available source categories and their sources.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | e.g. 'web API pentest', 'active directory privesc', 'BLE assessment' | |
| category | No | optional category filter |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | source name from a search result | |
| path | Yes | relpath from a search result |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes |
TDQS
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.
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.
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.
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.
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.
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_searchA
Full-text search across every indexed offline security knowledge base (HackTricks, PayloadsAllTheThings, OWASP WSTG/MASVS/ASVS, the LOTL DBs, RE/OSINT/DFIR/Bluetooth/WiFi/SDR sources, ...). Returns ranked matches with source, category, path and a snippet. Use this to ground answers and checklists in real documentation.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | search terms, e.g. 'kerberoast' or 'ssrf bypass' | |
| category | No | optional category filter (see grimoire_categories) | |
| limit | No | max results (default 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It fully discloses that the tool performs a read-only search across local knowledge bases, that results are ranked, and what the return fields are (source, category, path, snippet). It lacks details like exact result size limits or pagination behavior, but these are minor omissions for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence defines the action and scope, the second provides usage guidance and return details. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with 3 well-documented parameters and no output schema, the description fully covers what the tool does, what it returns, and when to use it. It references sibling tools for category lookup and gives concrete examples. No gaps remain for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Parameter schema coverage is 100%, and the schema already defines each parameter. The description adds value by providing usage examples (e.g., 'kerberoast') and linking category to a sibling tool, as well as describing the return format which gives context to the parameters. This exceeds the baseline of 3 for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb-resource pairing ('Full-text search across every indexed offline security knowledge base') and lists concrete sources (HackTricks, PayloadsAllTheThings, etc.), making the tool's scope crystal clear. It distinguishes from siblings like grimoire_categories and grimoire_fetch_doc by describing its search function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Use this to ground answers and checklists in real documentation,' providing clear usage context. However, it does not mention when NOT to use it or reference alternative siblings like grimoire_context for broader searches, so exclusions are missing.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | e.g. 'kerberoasting', 'BLE sniffing with Sniffle', 'GPS spoofing' | |
| category | No | optional category filter |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes |
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
Real-time CVE, exploit, and vulnerability intelligence for AI assistants (350K+ CVEs, 115K+ PoCs)
Securely search and manage workspace context files for AI agents and teams.
CVE lookups (NVD) and dependency-manifest audits (OSV) for AI agents. No API keys.
Shared, permission-aware company context for AI agents, with provenance, approvals and audit.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides 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.41MIT
- AlicenseNot gradedqualityDmaintenanceA 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.1MIT
- AlicenseAqualityCmaintenanceExposes the MITRE ATT\&CK framework to LLMs and AI assistants via the Model Context Protocol, enabling querying of techniques, tactics, groups, software, and mitigations.913MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to search, retrieve, and summarize content from workplace tools including Google Drive, Notion, Slack, and Confluence through secure Model Context Protocol.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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