IWE
NPM · @IWE-ORG/MCP
Markdown knowledge base as agent memory. Runs against the notes directory it is started in.
Available components
Last scanned (1 hour ago)
Scores higher than 94% of npm servers
Category Memory and Knowledge
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
- No install/post-install scripts declared.Pass
- 0 of 6 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency97
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to iwe-org/iwe). View diagnostics → Pass
- Clear OSI-approved license (Apache-2.0).Pass
- Actively maintained (last published 0 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability69
- 75% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Partial
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 2862 tokens (~150/item across 19 items; 14 tools + 5 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 Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
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; "iwe_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 16 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
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.
- 16 Oct 26 0
- Stability: 0.97 → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Stability: 0.97 → pass security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Schema quality: 75 → unverified ▼ functional
- Package version: 0.26.1 → 0.27.0 functional
- 15 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Oct 26 +42
- Injection markers: unverified → pass ▲ security
- Tool coverage: unverified → 100 ▲ functional
- MCP protocol: unverified → pass ▲ functional
- Stability: unverified → 0.93 ▲ functional
- Schema quality: unverified → 75 ▲ functional
- Package version: 0.25.0 → 0.26.1 functional
- 13 Oct 26 0
- Package version: 0.25.0 → 0.26.1 functional
- 12 Oct 26 0
- Security disclosure: unverified → fail ▼ functional
- Package version: 0.25.0 → 0.26.1 functional
- 11 Oct 26 −42
- Stability: 0.93 → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Capabilities: pass → unverified ▼ functional
- Security disclosure: fail → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Schema quality: 75 → unverified ▼ functional
- Package version: 0.25.0 → 0.26.1 functional
- 7 Oct 26 −1
- Stability: pass → 0.93 functional
- 6 Oct 26 +1
- Stability: 0.93 → pass security
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 17 Oct 2026 · Analysed npm/@iwe-org/mcp@0.27.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | iwe-org/iwe |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/iwe-org/iwe/.github/workflows/release.yaml@refs/tags/iwe-v0.27.0 |
| Rekor log index | 3278640488 |
| Predicate type | SLSA build provenance https://slsa.dev/provenance/v1 |
| Subject digest | sha512:7f554901b1e516765c1daac9ed8e85a11c60ead3af4a14d71487e71015c1b30c4a17009791212dfafac1e55a17542d11563510992e9c4626d30498410 |
Background: How many MCP packages publish verified provenance →
Dependencies 6 packages
| Packages resolved | 6 |
|---|---|
| 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 →
iwe_attach ~181
Attach a document as a block reference in one or more target documents determined by configured attach actions. Each target key is derived from the action's key_template (e.g. daily/{{today}}). The `to` field accepts a list of action names; the source is attached under each resolved target. Targets that already contain the source are silently skipped. Use list mode to discover available attach actions.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean|null | – | Preview changes without applying. Default: false |
| key | string|null | – | Document key to attach as a block reference in the target(s) |
| list | boolean|null | – | List available attach actions instead of executing. Default: false |
| to | array | – | Configured attach action(s) to attach to (e.g. 'today'). Pass one or more action names; the source is attached under each resolved target. |
No output schema declared.
No examples provided.
iwe_create ~259
Create a document at an explicit `key` from the complete markdown in `content` — frontmatter block first (when there is one), then the title heading and the body. The content is written verbatim; the server adds nothing and moves nothing. Derive the key from stable metadata (entity name, session date), not the title wording. Pass if_exists: "skip" to make retries idempotent. Stats warnings (dangling links, orphans, similar pages) may ride the result; resolve them before ending the session.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | The complete document, written verbatim: the YAML frontmatter block first (when there is one), then the markdown, normally starting with a `# Title` heading. Nothing is added or moved. |
| if_exists | – | – | Behavior when the key already exists: "fail" (default) reports an error, "skip" leaves the existing document untouched and returns created: false, which makes retries idempotent. |
| key | string | yes | Document key — the created document's stable identity. Derive it from stable metadata (entity name, session date), not the title wording. Subdirectory keys allowed (e.g. people/ada); do not include a… |
No output schema declared.
No examples provided.
iwe_delete ~85
Delete a document from the knowledge graph. All block references and inline links to this document in other documents are cleaned up. Stats warnings (dangling links, orphans, similar pages) may ride the result; resolve them before ending the session.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean|null | – | Preview changes without applying. Default: false |
| key | string | yes | Document key to delete |
No output schema declared.
No examples provided.
iwe_extract ~126
Extract a section from a document into a new standalone document. The original section is replaced with a block reference. Use list mode to discover sections first
| Name | Type | Req | Description |
|---|---|---|---|
| block | integer|null | – | Block number to extract (1-indexed, use list mode to discover) |
| dry_run | boolean|null | – | Preview changes without applying. Default: false |
| key | string | yes | Source document key |
| list | boolean|null | – | List all sections with block numbers instead of extracting. Default: false |
| section | string|null | – | Section title to extract (case-insensitive partial match) |
No output schema declared.
No examples provided.
iwe_find ~466
Search and discover documents in the knowledge graph. Supports fuzzy text query (`query`), root filter (`roots`), direct-reference filters (`refs_to`, `refs_from`), and the structural set selector (`in` / `in_any` / `not_in` / `max_depth`) for transitive sub-document AND/OR/NOT queries with configurable depth.
| Name | Type | Req | Description |
|---|---|---|---|
| add_fields | string|null | – | Additive projection: same grammar as project (bare names are frontmatter fields, `$`-selectors are the document's own), extends defaults rather than replacing. Mutually exclusive with project. |
| fuzzy | string|null | – | Fuzzy match on document title and key |
| in | array | – | Restrict to candidates that are sub-documents of EVERY listed key (AND). Each entry is either a bare KEY or {key, depth}. |
| in_any | array | – | Restrict to candidates that are sub-documents of AT LEAST ONE listed key (OR). |
| lexical | string|null | – | Lexical (BM25) full-text match on title and body |
| limit | integer|null | – | Maximum number of results to return. Unlimited if omitted (0 also = unlimited). |
| max_depth | integer|null | – | Default depth for in / in_any / not_in entries that don't specify their own depth. Omit for unbounded. |
| max_document_tokens | integer|null | – | Cap projected `$content` tokens per result. Unlimited if omitted (0 also = unlimited). |
| max_tokens | integer|null | – | Cap total projected `$content` tokens across all results. Unlimited if omitted (0 also = unlimited). |
| not_in | array | – | Exclude candidates that are sub-documents of ANY listed key (NOT). |
| project | string|null | – | Replacement projection (e.g. '$title,priority' or 'body=$content,parents=$includedBy'). Bare names are frontmatter fields, and project null when the document has no such field; document fields are `$… |
| refs_from | string|null | – | Only return documents referenced by this key |
| refs_to | string|null | – | Only return documents that reference this key |
No output schema declared.
No examples provided.
iwe_inline ~159
Replace a block reference with the actual content of the referenced document. Use list mode to discover block references first
| Name | Type | Req | Description |
|---|---|---|---|
| as_quote | boolean|null | – | Inline as blockquote instead of section. Default: false |
| block | integer|null | – | Block number to inline (1-indexed, use list mode to discover) |
| dry_run | boolean|null | – | Preview changes without applying. Default: false |
| keep_target | boolean|null | – | Keep the target document after inlining. Default: false |
| key | string | yes | Document key containing the block reference |
| list | boolean|null | – | List all block references instead of inlining. Default: false |
| reference | string|null | – | Reference key or title to inline (partial match) |
No output schema declared.
No examples provided.
iwe_normalize ~32
Normalize all document formatting across the knowledge graph. Re-parses and re-writes all documents to ensure consistent formatting
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
iwe_query ~351
Run an IWE query/block-selection operation document. `find` and `count` read; `update` mutates frontmatter and blocks (operators $replace, $replaceText, $insertBefore, $insertAfter, $append, $delete); `delete` removes documents. Membership uses the `$content` filter operator; reads project `$content` narrowing, `$blocks`, and `$matches`. Always strict: every mutating application must carry an `expect` guard (document-level `expect` plus one per block operator). Use `find` with `$blocks`/`$matches` to locate targets and learn counts before mutating. Update/delete results may carry stats warnings (dangling links, orphans, similar pages); resolve them before ending the session.
| Name | Type | Req | Description |
|---|---|---|---|
| document | string | yes | The operation document as YAML. Uses the IWE query + block-selection language: `filter` (with $content block membership), `project`/`addFields` ($content narrowing, $blocks, $matches), `sort`, `limit… |
| dry_run | boolean|null | – | Preview mutations without writing to disk (update/delete only). Default: false. |
| operation | – | yes | Operation kind: find (read documents), count (count documents), update (mutate frontmatter and/or blocks), or delete (remove documents). |
No output schema declared.
No examples provided.
iwe_rename ~72
Rename a document key. All block references and inline links across the entire graph are updated to point to the new key
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean|null | – | Preview changes without applying. Default: false |
| new_key | string | yes | New document key |
| old_key | string | yes | Current document key |
No output schema declared.
No examples provided.
iwe_retrieve ~600
Retrieve documents from the knowledge graph. Reads the given `keys` (or search seeds) and expands the graph around them via `expand` (includes / includedBy / references / referencedBy). With `search`/`fuzzy`, seeds are found by relevance within the candidate set (keys + selector); `limit` caps the seeds before expansion and `max_documents` caps the documents returned after expansion.
| Name | Type | Req | Description |
|---|---|---|---|
| backlinks | boolean|null | – | Include incoming inline references. Default: true |
| children | boolean|null | – | Populate the `includes` array with child document edges. Default: false |
| context | integer|null | – | DEPRECATED: use `expand: { includedBy: N }`. |
| depth | integer|null | – | DEPRECATED: use `expand: { includes: N }`. |
| exclude | array|null | – | Document keys to exclude from results |
| expand | – | – | Expansion directions to follow out from each seed: object over includes / includedBy / references / referencedBy → integer depths (0 = unbounded, omitted = not followed). Expansion is doc-only when o… |
| fuzzy | string|null | – | Seed search: fuzzy query over title and key. Fuses with `search` (RRF). |
| in | array | – | Restrict to candidates that are sub-documents of EVERY listed key (AND). Each entry is either a bare KEY or {key, depth}. |
| in_any | array | – | Restrict to candidates that are sub-documents of AT LEAST ONE listed key (OR). |
| keys | array | – | Document keys to retrieve, or the candidate set searched within when `search`/`fuzzy` is present. Unknown keys are an error unless searching, where they match nothing. Can be empty when a structural… |
| limit | integer|null | – | Cap the number of seed documents kept before expansion — top-N by relevance when searching, the first N of the selection otherwise. Unlimited if omitted (0 also = unlimited). |
| links | boolean|null | – | DEPRECATED: use `expand: { references: 1 }`. |
| max_depth | integer|null | – | Default depth for in / in_any / not_in entries that don't specify their own depth. Omit for unbounded. |
| max_document_tokens | integer|null | – | Cap content tokens per document. Unlimited if omitted (0 also = unlimited). |
| max_documents | integer|null | – | Cap the number of documents returned after expansion, trimming periphery documents first. Unlimited if omitted (0 also = unlimited). |
| max_tokens | integer|null | – | Cap total content tokens across all documents. Unlimited if omitted (0 also = unlimited). |
| not_in | array | – | Exclude candidates that are sub-documents of ANY listed key (NOT). |
| search | string|null | – | Seed search: BM25 full-text query over title and body. Present → the tool searches the candidate set and reads the ordered seeds. |
No output schema declared.
No examples provided.
iwe_squash ~64
Expand all block references into a single flat markdown document. Useful for export or generating a complete view of a document tree
| Name | Type | Req | Description |
|---|---|---|---|
| depth | integer|null | – | Levels of references to expand. Default: 2 |
| key | string | yes | Root document key to expand |
No output schema declared.
No examples provided.
iwe_stats ~51
Get comprehensive statistics about the knowledge graph including document counts, reference patterns, broken links, and most connected documents
| Name | Type | Req | Description |
|---|---|---|---|
| key | string|null | – | Document key for per-document stats. Omit for aggregate graph statistics |
No output schema declared.
No examples provided.
iwe_tree ~220
View the hierarchical tree structure of the knowledge graph showing how documents are connected via block references. Supports the structural set selector (in / in_any / not_in / max_depth) — when provided, the tree roots are restricted to (or selected from) that set.
| Name | Type | Req | Description |
|---|---|---|---|
| depth | integer|null | – | Maximum traversal depth. Default: 4 |
| in | array | – | Restrict to candidates that are sub-documents of EVERY listed key (AND). Each entry is either a bare KEY or {key, depth}. |
| in_any | array | – | Restrict to candidates that are sub-documents of AT LEAST ONE listed key (OR). |
| keys | array|null | – | Starting document keys. Unknown keys are an error. If empty and no selector, shows all root documents. |
| max_depth | integer|null | – | Default depth for in / in_any / not_in entries that don't specify their own depth. Omit for unbounded. |
| not_in | array | – | Exclude candidates that are sub-documents of ANY listed key (NOT). |
No output schema declared.
No examples provided.
iwe_update ~65
Update the full markdown content of an existing document. Stats warnings (dangling links, orphans, similar pages) may ride the result; resolve them before ending the session.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | New full markdown content |
| key | string | yes | Document key to update |
No output schema declared.
No examples provided.
How do I install the IWE MCP server?
IWE runs locally as an npm package, launched with npx -y @iwe-org/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · @iwe-org/mcp
claude mcp add iwe-org-iwe -- npx -y @iwe-org/mcp
What is the IWE MCP server?
IWE is an MCP server listed in the public MCP registry as io.github.iwe-org/iwe. Markdown knowledge base as agent memory. Runs against the notes directory it is started in. This page covers its npm package (@iwe-org/mcp).
Is the IWE MCP server safe to use?
IWE scores 92 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 17 October 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. 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 IWE MCP server expose?
IWE exposes 14 tools: iwe_attach, iwe_create, iwe_delete, iwe_extract, iwe_find, and 9 more. Their descriptions and schemas cost roughly 2,731 tokens of context every time the server is loaded.
Is the IWE MCP server still maintained?
IWE is still listed as active in the MCP registry. We last reached this channel on 17 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the IWE MCP server under?
IWE declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.