io.github.emergent-wisdom/semahash
PYPI · SEMAHASH
Content-addressed semantics: fail-closed handshakes over 617 cognitive patterns.
Available components
Last scanned (39 minutes ago)
Scores higher than 89% of PyPI servers
Category Memory and Knowledge
Recent critical change
CVE-2026-112398 affects this package (24 Oct 2026). See the changelog before you install this server.
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 Security99
- No malware found by supply-chain analysis.Pass
- Known CVEs were checked across the 66 of 68 dependencies we could resolve, so this covers what we could see, not the whole tree.Partial
- Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
- Dependency health was assessed across the 66 of 68 dependencies we could resolve, so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency84
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to emergent-wisdom/sema). View diagnostics → Pass
- License check failed: the license (MIT AND CC-BY-4.0) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 25 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability66
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 3997 tokens (~210/item across 19 items; 19 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage71
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 0% of tool parameters carry a description.Fail
- Structured output schemas are declared (100% of tools); any adoption earns full credit.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; "sema_library_publish" implies "publish" 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 20 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
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.
- 5 Nov 26 +15
- Malware scan: unverified → pass ▲ security
- 30 Oct 26 −15
- Malware scan: pass → unverified ▼ security
- 29 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 28 Oct 26 −15
- Malware scan: pass → unverified ▼ security
- 26 Oct 26 +87
- CVE-2026-112403 no longer affects this package ▲ security
- CVE-2026-112900 no longer affects this package ▲ security
- CVE-2026-96639 no longer affects this package ▲ security
- CVE-2026-112398 no longer affects this package ▲ security
- CVE-2026-112393 no longer affects this package ▲ security
- Known CVEs: fail → partial ▲ security
- Stability: 0.97 → pass security
- Score status: failed → scored ▲ functional
- 24 Oct 26 0
- CVE-2026-112398 affects this package: high ▼ critical
- 23 Oct 26 0
- CVE-2026-96639 affects this package: high ▼ critical
- 22 Oct 26 0
- CVE-2026-112393 affects this package: high ▼ critical
- CVE-2026-112900 affects this package: high ▼ critical
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 5 Nov 2026 · Analysed pypi/semahash@0.10.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 | pypi |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | emergent-wisdom/sema |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/emergent-wisdom/sema/.github/workflows/publish.yml@refs/tags/v0.10.0 |
| Rekor log index | 3205320280 |
| Predicate type | PyPI publish attestation https://docs.pypi.org/attestations/publish/v1 |
| Subject digest | sha256:233ddb64d0ccf86ac538bfc7ee6737089469bf2d127a394cd99b51bce3e3149c |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 66 packages
| Packages resolved | 66 |
|---|---|
| Stale | 9 |
| No linked repository | 2 |
| Tree resolution | Partial |
The dependency tree was only partially resolved, so these counts may be incomplete.
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 →
sema_graph_skeleton ~39
Ultra-minimal graph overview (~150 tokens). Shows regions, hubs, and recent activity. Returns: Text summary of the graph structure.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_handshake ~622
Byte-level definition agreement check between two agents. Verifies that the requesting agent and the local registry have the *same definition* of a pattern, by comparing content hashes. This is a necessary precondition for shared reasoning about a pattern, but it is NOT a guarantee of shared behavior: two agents can agree on the definition text and still implement it differently. Think of it as "we read the same paragraph," not "we will do the same thing." Use this when you need to rule out silent vocabulary drift before coordinating on a pattern. It does not replace behavioral testing. Args: ref: Pattern reference (e.g., "StateLock#c9c2", "StateLock", or the full "sema:StateLock#mh:SHA-256:<64 hex>" a document carries), "vocab" for the semantic-set root, or "catalog" for exact handle-to-definition bindings. A hash inside ref is compared like your_hash; your_hash takes precedence when both are given. your_hash: Your local hash — the 4-char pattern stub, or the 16-char vocab root stub (or full 64-char root). If omitted, returns the canonical hash for you to compare. strict: If true, only a full 64-character hash can produce PROCEED. A matching stub returns REQUIRE_FULL_HASH. If false (default), stubs may proceed for cooperative drift detection. your_scheme: Aggregate-root scheme returned by `sema_root` or an initial aggregate handshake. Required whenever `your_hash` is supplied for `vocab` or `catalog`. Omission or a different scheme fails with HALT; `sema pull` cannot repair algorithm-only drift. Returns: JSON with verdict: PROCEED (accepted under the selected mode), HALT (mismatch), PROVIDE_HASH (no hash supplied), or REQUIRE_FULL_HASH (stub matches but strict mode needs the complete digest). PROCEED includes assurance=prefix or assurance=full_hash. Example workflow (pattern): 1. Agent A: sema_handshake("StateLock") -…
| Name | Type | Req | Description |
|---|---|---|---|
| ref | string | yes | – |
| strict | boolean | – | – |
| your_hash | – | – | – |
| your_scheme | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_library_install ~171
Install a published library by name, path, or library.json URL. Sema downloads the release, verifies every pattern identity and both roots, and builds a fresh read-only database before it registers the library. A name installs exactly the release that the registry verified; if the publisher now serves a different one, nothing is installed. The active vocabulary does not change: call `sema_use(db_path=<name>)` to switch to it. Args: library: A name from `sema_library_search`, a local path, or an HTTPS URL that ends with library.json. registry: The registry that resolves a name. Returns: JSON with the installed name, version, pattern count, and roots.
| Name | Type | Req | Description |
|---|---|---|---|
| library | string | yes | – |
| registry | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_library_login ~140
Store a registry key that the user created on their profile page. Use this when the user gives you a key that starts with `sema_`. Sema checks the key with the registry and stores it under the user's Sema configuration with owner-only permissions. Do not write the key into a file that is committed or shared. Args: key: The key, starting with sema_. registry: The registry the key belongs to, https://semahash.org by default. Returns: JSON with the account the key belongs to, or an error.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | – |
| registry | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_library_publish ~191
Publish a library release on the public registry. This is a public action: everyone can see and install the library afterwards. Ask the user before you call it. The release must be a public GitHub Release in a repository that the logged-in account owns. Build it first with `sema package` and attach its library.json and pattern archive to the release. The registry verifies the release and keeps a snapshot; the GitHub release stays the source. Args: manifest_url: The release's stable URL, for example https://github.com/USER/REPO/releases/latest/download/library.json registry: The registry to publish on, https://semahash.org by default. Returns: JSON with the published library and its page, or an error that says how to log in.
| Name | Type | Req | Description |
|---|---|---|---|
| manifest_url | string | yes | – |
| registry | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_library_search ~140
Find published Sema libraries on a registry, https://semahash.org by default. No login is needed. Each result gives the library name, version, source repository, pattern count, semantic root, license, and a stable library.json URL. Install one with `sema_library_install(library=<name>)`. Args: query: Words that must all appear in the name, owner, or repository. Empty lists every library. registry: Another registry origin, for example a local test site. Returns: JSON with the matching libraries, or an error.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | – | – |
| registry | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_lookup ~59
Lookup a pattern by its Sema reference (Handle#stub). Args: ref: Pattern reference like "ChainOfThought#27ad" or just "ChainOfThought" Returns: Full pattern JSON
| Name | Type | Req | Description |
|---|---|---|---|
| ref | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_mint ~203
Create a new pattern and add it to the vocabulary. The pattern is validated (schema, dependency wiring, DAG check), hashed to produce a content-addressed identity, and added to the local database. Returns the new pattern's sema_id on success. Exposed by default. Deployments that want a read-only server can set `SEMA_DISABLE_MINT=true` to hide this tool. Args: pattern_json: JSON string of the pattern to mint. Required fields: - handle: PascalCase name (e.g., "MyPattern") - mechanism: How the pattern works - gloss: One-line summary Recommended: invariants, preconditions, postconditions, failure_modes, dependencies, _meta.path (layer and category), _meta.ring, and _meta.tier Returns: JSON with the minted pattern's sema_id, or validation errors.
| Name | Type | Req | Description |
|---|---|---|---|
| pattern_json | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_propose_context ~341
Propose a shared definition set for multi-agent coordination. Computes a truncated catalog Merkle root over the requested handle-to-definition bindings. The receiving agent calls sema_verify_context with the same handles and compares roots. Properties of the digest: - Order-independent: handle bindings are sorted before the versioned RFC 9162 tree construction. - Binding-sensitive: swapping two handles' definitions changes the root. - 32 bits wide (8 hex chars). Birthday collisions become likely after roughly 65k independently sampled contexts. This is sufficient to catch ACCIDENTAL vocabulary drift between cooperating agents, but NOT a security primitive: an active adversary can brute-force a matching 4-byte prefix. - What it verifies: that both agents have byte-identical definitions for every pattern in the set. - What it does NOT verify: that both agents will behave compatibly when executing those patterns. Workflow: 1. Agent A: sema_propose_context(["StateLock", "Check", "Task"]) -> returns context_hash "7f3a..." + root_scheme 2. Agent A sends both values to Agent B 3. Agent B: sema_verify_context( ["StateLock", "Check", "Task"], "7f3a...", "<scheme>" ) -> PROCEED or HALT Args: handles: List of pattern handles to include in the context. Returns: JSON with the context_hash, root scheme, and pattern refs.
| Name | Type | Req | Description |
|---|---|---|---|
| handles | array | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_pull ~324
Refresh the local vocabulary from upstream. Walks the upstream DAG in topological order and updates the active database in place. User-only patterns are preserved; hashes cascade automatically when their upstream deps change. Superseded handles are redirected to their replacements by default (opt out with `preserve_superseded=True`). Returns structured JSON with `success`, `added`, `updated`, `skipped`, `cascaded_user`, `superseded_removed`, `superseded_kept_orphan`, `upstream_removed`, `vocabulary_root_before`, `vocabulary_root_after`, and `vocabulary_root_scheme` so callers can react programmatically instead of parsing the human log. Exposed by default. Deployments that want a pinned vocabulary can set `SEMA_DISABLE_PULL=true` to hide this tool. Args: source: Optional path to an alternate upstream DB. Defaults to the bundled vocabulary shipped with the installed package. dry_run: If True, previews changes (including supersession redirects) without writing to the active DB. exclude: Handles to skip for this invocation. Unioned with the persistent `~/.config/sema/excluded` list. preserve_superseded: If True, retain locally superseded patterns alongside their upstream replacements instead of removing them. Returns: JSON string of the result dict.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | – |
| exclude | – | – | – |
| preserve_superseded | boolean | – | – |
| source | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_reset_session ~64
Reset the session pattern cache. Clears the record of which patterns have been served this session, so the leading matches in subsequent searches return detailed results again. Use when context has been compressed or you need fresh detail. Returns: Confirmation with count of patterns cleared.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_resolve ~82
Get a pattern with its dependencies expanded. Args: handle: Pattern handle (e.g., "ChainOfThought") depth: How many hops to expand (1 = direct deps, 2 = deps of deps) Returns: JSON object with the pattern and its resolved dependencies
| Name | Type | Req | Description |
|---|---|---|---|
| depth | integer | – | – |
| handle | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_root ~125
Get both aggregate roots of the active vocabulary. The semantic-set root commits to the unordered set of definition digests and ignores duplicate meanings. The catalog root separately commits to exact handle-to-digest bindings. Both use versioned, domain-separated RFC 9162 Merkle Tree Hash constructions. Pair with `sema_handshake(ref="vocab", ...)` for semantic-set alignment or `sema_handshake(ref="catalog", ...)` for namespace alignment. Returns: JSON with both roots, schemes, counts, full IDs, and short stubs.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_search ~300
Search Sema patterns by name, description, or meaning (semantic search). Also search with the problem in front of you, for example "decide under uncertainty" or "find where a disagreement starts": patterns include protocols and checks that structure reasoning. Returns at most 20 ranked matches. The first three unseen matches include search detail; later and previously seen matches use compact summaries. New matches name their layer and category. Searching inside a layer or category ranks its closest patterns, weak matches included: use it when you know which category fits or the first results miss, alongside the unscoped search rather than instead of it, since a category guessed from the top results is often the wrong one. Use sema_resolve() to fetch the complete Pattern Card you need. Args: query: Search term or concept description. limit: Maximum matches to return. Defaults to 10 and is capped at 20. layer: Only search this layer (Physics, Mind, Society, Infrastructure). category: Only search this category, e.g. "Verification". Names are case-insensitive; sema_tree() lists them. Returns: JSON array of matching patterns, or an error naming the valid layers or categories when the one given does not exist.
| Name | Type | Req | Description |
|---|---|---|---|
| category | – | – | – |
| layer | – | – | – |
| limit | integer | – | – |
| query | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_stats ~25
Get statistics about the Sema vocabulary. Returns: JSON with vocabulary statistics
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_tree ~87
Browse the vocabulary structure organized by layer and category. Args: layer: Filter to specific layer (Physics, Mind, Society, Infrastructure) category: Filter to specific category verbose: If True, includes the gloss (description) for each pattern. Returns: JSON tree structure of patterns
| Name | Type | Req | Description |
|---|---|---|---|
| category | – | – | – |
| layer | – | – | – |
| verbose | boolean | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_use ~79
Switch the active vocabulary database without restarting. Args: db_path: Path to the database to switch to. Omit to show current. default: If True, switch back to the bundled vocabulary. Returns: JSON with the new vocabulary stats, or current status.
| Name | Type | Req | Description |
|---|---|---|---|
| db_path | string | – | – |
| default | boolean | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_validate ~55
Validate a pattern JSON using the same rules as the mint pipeline. Args: pattern_json: JSON string of a pattern to validate Returns: Validation result with any errors or warnings
| Name | Type | Req | Description |
|---|---|---|---|
| pattern_json | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
sema_verify_context ~185
Verify a semantic context proposed by another agent. Computes the local truncated catalog root for the given handle bindings and compares it against the remote agent's root under the declared scheme. PROCEED if both match, HALT if not. The short root is a drift-detection primitive between cooperating agents, not a security primitive against an adversary (see sema_propose_context for details). Args: handles: List of pattern handles in the proposed context. remote_hash: The context_hash received from the proposing agent. remote_scheme: The root_scheme received from the proposing agent. Omission or a different scheme fails closed. Returns: JSON with verdict: PROCEED (contexts match) or HALT (drift detected).
| Name | Type | Req | Description |
|---|---|---|---|
| handles | array | yes | – |
| remote_hash | string | yes | – |
| remote_scheme | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| result | string | yes | – |
No examples provided.
How do I install the io.github.emergent-wisdom/semahash MCP server?
io.github.emergent-wisdom/semahash runs locally as a PyPI package, launched with uvx semahash. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · semahash
claude mcp add emergent-wisdom-semahash -- uvx semahash
What is the io.github.emergent-wisdom/semahash MCP server?
io.github.emergent-wisdom/semahash is an MCP server listed in the public MCP registry as io.github.emergent-wisdom/semahash. Content-addressed semantics: fail-closed handshakes over 617 cognitive patterns. This page covers its PyPI package (semahash).
Is the io.github.emergent-wisdom/semahash MCP server safe to use?
io.github.emergent-wisdom/semahash scores 87 out of 100 on VerifyMCP. 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 io.github.emergent-wisdom/semahash MCP server expose?
io.github.emergent-wisdom/semahash exposes 19 tools: sema_reset_session, sema_search, sema_resolve, sema_tree, sema_lookup, and 14 more. Their descriptions and schemas cost roughly 3,232 tokens of context every time the server is loaded.
Is the io.github.emergent-wisdom/semahash MCP server still maintained?
io.github.emergent-wisdom/semahash is still listed as active in the MCP registry. We last reached this channel on 5 November 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 io.github.emergent-wisdom/semahash MCP server under?
io.github.emergent-wisdom/semahash declares the MIT AND CC-BY-4.0 licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.