# PromptSpeak Governance (npm · @chrbailey/promptspeak-mcp-server)

Pre-execution governance for AI agents. Validates tool calls before they execute.

- Trust score: 60/100 (medium)
- Change this week: −3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@chrbailey/promptspeak-mcp-server`: 60/100 (this document), [markdown](https://verifymcp.io/servers/chrbailey-promptspeak/chrbailey-promptspeak-mcp-server.md), [page](https://verifymcp.io/servers/chrbailey-promptspeak/chrbailey-promptspeak-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@chrbailey/promptspeak-mcp-server`
- Version: `0.4.1`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 78/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known medium-severity CVE affects @hono/node-server 1.19.17, a direct dependency. A fixed version is available.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (132 of 136), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 104 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 49/100
  - AI-judged instruction clarity (fair).
  - Tool/resource definitions use about 3522 tokens (~62/item across 56 items; 56 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 89/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 68% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add chrbailey-promptspeak -- npx -y @chrbailey/promptspeak-mcp-server
```

### Codex

```bash
codex mcp add chrbailey-promptspeak -- npx -y @chrbailey/promptspeak-mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "chrbailey-promptspeak": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@chrbailey/promptspeak-mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add chrbailey-promptspeak --command npx --arg -y --arg @chrbailey/promptspeak-mcp-server
```

### Hermes

```yaml
mcp_servers:
  chrbailey-promptspeak:
    command: "npx"
    args: ["-y", "@chrbailey/promptspeak-mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "chrbailey-promptspeak": {
      "command": "npx",
      "args": [
        "-y",
        "@chrbailey/promptspeak-mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 60, +4)

- [functional improvement] Stability: unverified → 0.27

### 2026-08-02 (score 56, +27)

- [security regression] Known CVEs: unverified → fail
- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Security disclosure: fail → unverified
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] License: unverified → pass
- [functional] Licence: MIT

### 2026-07-31 (score 29, +23)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 6, −62)

- [security regression] Known CVEs: fail → unverified
- [security regression] Malware scan: pass → unverified
- [security regression] Provenance: fail → unverified
- [security regression] Install scripts: pass → unverified
- [security improvement] GHSA-frvp-7c67-39w9 no longer affects this package
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] License: pass → unverified
- [functional regression] Dependency health: partial → unverified
- [functional regression] Maintenance: pass → unverified
- [functional] Licence: MIT

### 2026-07-28 (score 68, +5)

- [functional improvement] Schema quality: unverified → fair

### 2026-07-27 (score 63, +37)

- [security regression] GHSA-frvp-7c67-39w9 affects this package: medium
- [security regression] Known CVEs: unverified → fail
- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] License: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Schema quality: unverified
- [functional] First check of Schema quality: pass
- [functional] First check of Tool coverage: 68
- [functional] First check of Schema quality: fail
- [functional] Licence: MIT

### 2026-07-26 (score 26)

First indexed and scored.

## MCP tools (56)

### `ps_validate` (~91 tokens)

Validate a PromptSpeak frame. Returns validation report with errors, warnings, and suggestions.

Input parameters:

- `frame` (string, required): The PromptSpeak frame to validate (e.g., "⊕◊▶β")
- `parentFrame` (string): Optional parent frame for chain validation
- `strict` (boolean): If true, warnings also cause validation failure
- `validationLevel` (string): Level of validation to perform

### `ps_validate_batch` (~53 tokens)

Validate multiple frames at once. Useful for validating delegation chains.

Input parameters:

- `frames` (array, required)
- `stopOnFirstError` (boolean)
- `strict` (boolean)
- `validationLevel` (string)

### `ps_execute` (~74 tokens)

Execute an action under PromptSpeak frame governance. The gatekeeper validates and enforces constraints.

Input parameters:

- `action` (object, required)
- `agentId` (string, required): Unique identifier for the executing agent
- `frame` (string, required): The governing PromptSpeak frame
- `parentFrame` (string): Parent frame if part of delegation chain

### `ps_execute_dry_run` (~56 tokens)

Check if an action would succeed without executing. Returns decision and coverage analysis.

Input parameters:

- `action` (object, required)
- `agentId` (string, required)
- `frame` (string, required)
- `parentFrame` (string)

### `ps_execute_batch` (~125 tokens)

Execute multiple actions under a single frame. Supports sequential or parallel execution with optional stop-on-failure.

Input parameters:

- `actions` (array, required): Array of actions to execute under the frame
- `agentId` (string, required): Unique identifier for the executing agent
- `frame` (string, required): The governing PromptSpeak frame for all actions
- `parallel` (boolean): Execute all actions in parallel instead of sequentially
- `parentFrame` (string): Parent frame if part of delegation chain
- `stopOnFirstFailure` (boolean): Stop executing remaining actions on first failure (sequential only)

### `ps_delegate` (~75 tokens)

Delegate a task from parent agent to child agent. Enforces inheritance rules and constraint propagation.

Input parameters:

- `childAgentId` (string, required)
- `childFrame` (string, required)
- `inheritanceMode` (string)
- `parentAgentId` (string, required)
- `parentFrame` (string, required)
- `task` (object)

### `ps_delegate_revoke` (~40 tokens)

Revoke an active delegation.

Input parameters:

- `delegationId` (string, required)
- `parentAgentId` (string, required)
- `reason` (string)

### `ps_delegate_list` (~38 tokens)

List delegations for an agent.

Input parameters:

- `agentId` (string, required)
- `role` (string)
- `status` (string)

### `ps_state_get` (~31 tokens)

Get current state of an agent including drift metrics and circuit breaker status.

Input parameters:

- `agentId` (string, required)

### `ps_state_system` (~23 tokens)

Get overall system state including all agents, operations, and drift alerts.

### `ps_state_reset` (~67 tokens)

Reset agent state. Can reset circuit breaker, drift metrics, and/or baseline.

Input parameters:

- `agentId` (string, required)
- `reason` (string, required)
- `resetBaseline` (boolean)
- `resetCircuitBreaker` (boolean)
- `resetDriftMetrics` (boolean)

### `ps_state_recalibrate` (~60 tokens)

Recalibrate agent drift baseline. Optionally provide a new baseline configuration.

Input parameters:

- `agentId` (string, required): Agent to recalibrate
- `newBaseline` (object): Optional new baseline configuration. If omitted, recalibrates from current state.

### `ps_state_halt` (~35 tokens)

Immediately halt an agent by opening its circuit breaker.

Input parameters:

- `agentId` (string, required)
- `reason` (string, required)

### `ps_state_resume` (~37 tokens)

Resume a halted agent.

Input parameters:

- `agentId` (string, required)
- `reason` (string, required)
- `resetMetrics` (boolean)

### `ps_state_drift_history` (~42 tokens)

Get drift history for an agent.

Input parameters:

- `agentId` (string, required)
- `limit` (number)
- `since` (number): Unix timestamp

### `ps_config_set` (~30 tokens)

Register a new policy overlay.

Input parameters:

- `overlay` (object, required)
- `overlayId` (string, required)

### `ps_config_activate` (~23 tokens)

Activate a registered policy overlay.

Input parameters:

- `overlayId` (string, required)

### `ps_config_get` (~18 tokens)

Get current configuration including active overlay and thresholds.

### `ps_config_export` (~15 tokens)

Export current configuration for backup.

### `ps_config_import` (~29 tokens)

Import configuration from backup.

Input parameters:

- `data` (string, required)
- `expectedChecksum` (string)

### `ps_confidence_set` (~37 tokens)

Set a confidence threshold. This is the hidden knob for operators.

Input parameters:

- `threshold` (string, required)
- `value` (number, required)

### `ps_confidence_get` (~15 tokens)

Get all confidence thresholds.

### `ps_confidence_bulk_set` (~25 tokens)

Set multiple confidence thresholds at once.

Input parameters:

- `thresholds` (object, required)

### `ps_feature_set` (~28 tokens)

Set a feature flag.

Input parameters:

- `enabled` (boolean, required)
- `flag` (string, required)

### `ps_feature_get` (~14 tokens)

Get all feature flags.

### `ps_audit_get` (~36 tokens)

Get audit log entries.

Input parameters:

- `action` (string)
- `limit` (number)
- `since` (number)

### `ps_parse` (~58 tokens)

Parse a PromptSpeak EBNF expression into an AST. Returns AST tree and metadata (verb count, pipes, branches).

Input parameters:

- `expression` (string, required): PromptSpeak expression (e.g., "::analyze{document}[security]|format:json")

### `ps_expand` (~39 tokens)

Expand a PromptSpeak expression to natural English. Used by safety filters for human-readable action descriptions.

Input parameters:

- `expression` (string, required): PromptSpeak expression to expand

### `ps_registry_lookup` (~37 tokens)

Resolve a verb symbol to its full definition, including aliases.

Input parameters:

- `symbol` (string, required): Verb symbol (e.g., "::analyze")

### `ps_registry_propose` (~86 tokens)

Submit a new verb for review. Created with status: proposed.

Input parameters:

- `category` (string): Verb category
- `definition` (string, required): Semantic definition of the verb
- `namespace` (string, required): Namespace (e.g., "ps:custom")
- `safety_class` (string): Safety classification
- `symbol` (string, required): Verb symbol (e.g., "::myverb")

### `ps_registry_status` (~31 tokens)

Check the lifecycle state and safety classification of a verb.

Input parameters:

- `symbol` (string, required): Verb symbol to check

### `ps_registry_namespace` (~40 tokens)

List all verbs registered in a namespace.

Input parameters:

- `namespace` (string, required): Namespace to list (e.g., "ps:core", "ps:gov")

### `ps_registry_audit` (~36 tokens)

Get full change history for a verb (registrations, transitions, updates).

Input parameters:

- `symbol` (string, required): Verb symbol to audit

### `ps_registry_version` (~21 tokens)

Get current spec version, verb count, and registry statistics.

### `ps_handshake_initiate` (~28 tokens)

Start a PromptSpeak verification handshake. Returns probe expression to send to remote agent.

### `ps_handshake_respond` (~41 tokens)

Handle an incoming PromptSpeak handshake probe. Parses, validates, and echoes confirmation.

Input parameters:

- `input` (string, required): The handshake probe expression to respond to

### `ps_capability_get` (~25 tokens)

Report this server's PromptSpeak capabilities (version, verb count, namespaces).

### `ps_hold_list` (~61 tokens)

List all pending holds awaiting human approval. Returns holds for risky operations that were blocked pending review.

Input parameters:

- `agentId` (string): Optional: Filter holds by agent ID
- `includeExpired` (boolean): Include expired holds in the list (default: false)

### `ps_hold_approve` (~102 tokens)

Approve a held execution request. The operation will proceed with optional modifications.

Input parameters:

- `executeNow` (boolean): Execute immediately after approval (default: true)
- `holdId` (string, required): The hold ID to approve
- `modifiedArgs` (object): Optional: Modified arguments to use instead of original
- `modifiedFrame` (string): Optional: Modified frame to use instead of original
- `reason` (string): Reason for approval (for audit trail)

### `ps_hold_reject` (~69 tokens)

Reject a held execution request. The operation will not proceed.

Input parameters:

- `haltAgent` (boolean): Also halt the agent that made the request (default: false)
- `holdId` (string, required): The hold ID to reject
- `reason` (string): Reason for rejection (for audit trail)

### `ps_hold_config` (~53 tokens)

Configure hold behavior and thresholds. Controls when operations are held for human review.

Input parameters:

- `action` (string, required): Get current config or set new config
- `config` (object): Configuration to set (only for action=set)

### `ps_hold_stats` (~34 tokens)

Get hold statistics and history.

Input parameters:

- `historyLimit` (number): Number of historical decisions to return (default: 10)

### `ps_security_scan` (~58 tokens)

Scan code content for security vulnerabilities. Returns findings classified by severity (critical, high, medium, low, info).

Input parameters:

- `content` (string, required): Code content to scan
- `patterns` (array): Optional: Only run these specific pattern IDs

### `ps_security_gate` (~69 tokens)

Scan code and enforce security policy. Blocks on critical findings, holds high-severity for review, warns on medium, logs low/info.

Input parameters:

- `action` (string, required): The action being gated (e.g., "write_file", "edit_file")
- `content` (string, required): Code content to scan

### `ps_security_config` (~75 tokens)

Configure security detection patterns. List, enable, disable, or change severity of patterns.

Input parameters:

- `action` (string, required): Configuration action to perform
- `patternId` (string): Pattern ID to modify (required for enable, disable, set_severity)
- `severity` (string): New severity level (required for set_severity)

### `ps_symbol_create` (~436 tokens)

Create a new directive symbol in the registry.

Symbol IDs follow the pattern:
\- Public companies: Ξ.{TICKER}.{PERIOD} (e.g., Ξ.NVDA.Q3FY25)
\- People: Ξ.I.{NAME}.{CONTEXT} (e.g., Ξ.I.JENSEN_HUANG.BIO)
\- Events: Ξ.E.{TYPE}.{ID} (e.g., Ξ.E.EARNINGS.NVDA.20241120)
\- Sectors: Ξ.S.{SECTOR}.{CONTEXT} (e.g., Ξ.S.SEMICONDUCTORS.2024)
\- Tasks: Ξ.T.{PROJECT}.{ID} (e.g., Ξ.T.PORTFOLIO_REVIEW.001)
\- Knowledge: Ξ.K.{DOMAIN}.{TOPIC} (e.g., Ξ.K.CHEMISTRY.WATER)
\- Queries: Ξ.Q.{DATASET}.{ID} (e.g., Ξ.Q.DEEPSEARCHQA.001)

Input parameters:

- `anti_requirements` (array): MUST NOT include these elements
- `category` (string): Category (auto-inferred from ID if not provided)
- `commanders_intent` (string, required): Ultimate goal in one sentence - the north star
- `created_by` (string): Creator identifier
- `how` (object, required)
- `key_terms` (array): Terms that MUST appear in output
- `parent_symbol` (string): Parent symbol ID for hierarchical symbols
- `related_symbols` (array): Related symbol IDs
- `requirements` (array, required): MUST include these elements
- `symbolId` (string, required): Unique symbol ID following namespace rules (e.g., Ξ.NVDA.Q3FY25)
- `tags` (array): Freeform tags for filtering
- `what` (string, required): What is being analyzed or done
- `when` (string, required): Time context
- `where` (string, required): Scope (company, market, geography)
- `who` (string, required): Who needs this / who is the audience
- `why` (string, required): Why this matters / purpose

### `ps_symbol_get` (~84 tokens)

Retrieve a directive symbol by ID. Returns the full symbol with all grounding context.

Input parameters:

- `include_changelog` (boolean): Include version changelog (default: true)
- `symbolId` (string, required): Symbol ID to retrieve (e.g., Ξ.NVDA.Q3FY25)
- `version` (number): Specific version to retrieve (optional, defaults to latest)

### `ps_symbol_update` (~92 tokens)

Update an existing symbol. Creates a new version with updated hash.

Input parameters:

- `change_description` (string, required): Description of what changed (for changelog)
- `changed_by` (string): Who made the change
- `changes` (object, required): Fields to update (who, what, why, where, when, how, commanders_intent, requirements, etc.)
- `symbolId` (string, required): Symbol ID to update

### `ps_symbol_list` (~107 tokens)

List symbols with optional filtering.

Input parameters:

- `category` (string): Filter by category
- `created_after` (string): Filter by creation date (ISO 8601)
- `created_before` (string): Filter by creation date (ISO 8601)
- `limit` (number): Max results (default: 50)
- `offset` (number): Pagination offset
- `search` (string): Search in symbolId and commanders_intent
- `tags` (array): Filter by tags

### `ps_symbol_delete` (~38 tokens)

Delete a symbol from the registry.

Input parameters:

- `reason` (string, required): Reason for deletion
- `symbolId` (string, required): Symbol ID to delete

### `ps_symbol_import` (~114 tokens)

Bulk import symbols from external data (HuggingFace, JSON, etc.).

Input parameters:

- `category` (string, required): Category for imported symbols
- `data` (required): The data to import (format depends on source)
- `defaults` (object): Default values for fields not in source data
- `id_prefix` (string, required): Prefix for generated symbol IDs (e.g., Ξ.Q.DEEPSEARCHQA)
- `source` (string, required): Data source format
- `transform` (object): Field mapping from source data to symbol fields

### `ps_symbol_stats` (~16 tokens)

Get statistics about the symbol registry.

### `ps_symbol_format` (~49 tokens)

Format a symbol for inclusion in a prompt. Returns LLM-ready text.

Input parameters:

- `format` (string): Format style (default: full)
- `symbolId` (string, required): Symbol ID to format

### `ps_symbol_verify` (~189 tokens)

Record human verification of a symbol claim.

Use this tool to upgrade or dispute claims based on human review:
\- VERIFIED: Human expert has confirmed the claim is accurate
\- CORROBORATED: Additional evidence supports the claim
\- DISPUTED: Human reviewer found the claim to be incorrect or misleading

Important: Accusatory claims (fraud, violations) should be DISPUTED if they lack
evidence or have plausible alternative explanations.

Input parameters:

- `evidence_added` (array): List of evidence sources that support this verification
- `new_confidence` (number): New confidence level (0-1). Auto-calculated if not provided.
- `new_status` (string, required): New epistemic status for the claim
- `notes` (string): Notes explaining the verification decision
- `reviewer` (string, required): Identifier of the human reviewer
- `symbolId` (string, required): Symbol ID to verify

### `ps_symbol_list_unverified` (~145 tokens)

List symbols that require human review.

Returns symbols flagged for review due to:
\- Accusatory claims without sufficient evidence
\- Missing alternative explanations
\- High-stakes claims (fraud, violations, diagnoses)
\- Low confidence scores

Use this to find claims that need human validation before action.

Input parameters:

- `claim_type` (string): Filter by claim type (e.g., ACCUSATORY for fraud allegations)
- `limit` (number): Maximum results to return (default: 50)
- `max_confidence` (number): Maximum confidence level to include
- `min_confidence` (number): Minimum confidence level to include
- `offset` (number): Pagination offset

### `ps_symbol_add_alternative` (~172 tokens)

Add an alternative explanation to a symbol's findings.

CRITICAL for preventing false positives: When a pattern-based finding could have
multiple explanations, document them here. Adding high-likelihood alternatives
automatically reduces confidence in the original claim.

Examples:
\- "9 identical payments" → Alternative: "Monthly insurance premium financing"
\- "Large round numbers" → Alternative: "Negotiated contract amounts"
\- "Vendor with single customer" → Alternative: "Subsidiary company"

Input parameters:

- `added_by` (string, required): Who is adding this alternative
- `alternative` (string, required): Description of the alternative explanation
- `likelihood` (number, required): Estimated likelihood this alternative is correct (0-1)
- `reasoning` (string): Why this alternative is plausible
- `symbolId` (string, required): Symbol ID to update

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/chrbailey-promptspeak/chrbailey-promptspeak-mcp-server#diagnostics

## Score history

- 2026-08-03: 60
- 2026-08-02: 56
- 2026-08-01: 29
- 2026-07-31: 29
- 2026-07-30: 6
- 2026-07-28: 68
- 2026-07-27: 63
- 2026-07-26: 26

## Links

- npm package: https://www.npmjs.com/package/@chrbailey/promptspeak-mcp-server
- Socket report: https://socket.dev/npm/package/@chrbailey/promptspeak-mcp-server
- Repository: https://github.com/chrbailey/promptspeak-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/chrbailey-promptspeak/chrbailey-promptspeak-mcp-server/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/chrbailey-promptspeak/chrbailey-promptspeak-mcp-server/changelog.json
- HTML version of this page: https://verifymcp.io/servers/chrbailey-promptspeak/chrbailey-promptspeak-mcp-server
