# co.policyforge/mcp (npm · @policyforge/mcp)

Generate, audit, and maintain legal policies that match what your code actually does.

- Trust score: 28/100 (low)
- Change this week: +10
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `policyforge.co`: 39/100, [markdown](https://verifymcp.io/servers/co-policyforge-mcp/api-mcp.md), [page](https://verifymcp.io/servers/co-policyforge-mcp/api-mcp)
- npm · `@policyforge/mcp`: 28/100 (this document), [markdown](https://verifymcp.io/servers/co-policyforge-mcp/policyforge-mcp.md), [page](https://verifymcp.io/servers/co-policyforge-mcp/policyforge-mcp)

## Channel facts

- Registry: `npm`
- Package: `@policyforge/mcp`
- Version: `0.6.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**: 63/100
  - No malware found by supply-chain analysis.
  - CVE data not yet available for this package.
  - No install/post-install scripts declared.
  - Dependency-health data not yet available.
- **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 0 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 0/100
  - Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- **Tool Coverage**: 0/100
  - Tool coverage not yet verified: we do not have a sandbox capture of the tool definitions this version of the package serves yet.
- **Capabilities**: 0/100
  - Protocol version not yet verified: we do not have a sandbox capture of the MCP handshake this version of the package performs yet.

**Unverified: 4 categories.** Categories scored 0 because our sandbox run of this package has not given us the schema these checks need to read. That is a gap on our side rather than a finding about the package, and we only credit what we can confirm, so the score stands at 0 until the capture succeeds. We are working through the fleet, so this normally clears without any action from you.

## Install

### Claude

```bash
claude mcp add co-policyforge-mcp -- npx -y @policyforge/mcp
```

### Codex

```bash
codex mcp add co-policyforge-mcp -- npx -y @policyforge/mcp
```

### opencode

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

### OpenClaw

```bash
openclaw mcp add co-policyforge-mcp --command npx --arg -y --arg @policyforge/mcp
```

### Hermes

```yaml
mcp_servers:
  co-policyforge-mcp:
    command: "npx"
    args: ["-y", "@policyforge/mcp"]
```

### Other

```json
{
  "mcpServers": {
    "co-policyforge-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@policyforge/mcp"
      ]
    }
  }
}
```

## 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 28, −2)

- [security regression] Known CVEs: partial → unverified
- [security improvement] Source repository: fail → 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] Security disclosure: unverified → fail
- [functional regression] Dependency health: partial → unverified
- [functional] Tool coverage: Tool coverage not yet verified: we do not have a sandbox capture of the tool definitions this version of the package serves yet.
- [functional] Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional] Capabilities: Protocol version not yet verified: we do not have a sandbox capture of the MCP handshake this version of the package performs yet.
- [functional] Package version: 0.4.0 → 0.6.1
- [functional] Package version: 0.4.0 → 0.6.0

### 2026-08-02 (score 30, +30)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [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 improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional] Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional] Tool coverage: Tool coverage not yet verified: we do not have a sandbox capture of the tool definitions this version of the package serves yet.
- [functional] Capabilities: Protocol version not yet verified: we do not have a sandbox capture of the MCP handshake this version of the package performs yet.
- [functional] Licence: MIT

### 2026-07-31 (score 0, −18)

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

### 2026-07-27 (score 18)

First indexed and scored.

## MCP tools (15)

### `generate_policy` (~734 tokens)

Generate policy

Generate a legal policy (privacy policy, terms of service, cookie policy, refund policy, EULA, or disclaimer) for a business and return its Markdown content plus a hosted URL. Consumes one policy from the account's quota. IMPORTANT: if you are working inside the user's project, call get_disclosure_checklist and scan the codebase FIRST (dependencies, script tags, cookie writes, outbound hosts), then fill the optional fields below from what the code actually does — do not ask the user for facts you can read from source. Only ask for what code cannot tell you: legal company name, contact email, physical address, governing law.

Input parameters:

- `analytics` (boolean): Does it use analytics?
- `business_type` (string, required): The company's business category.
- `children_data` (boolean): Does it knowingly collect data from children?
- `company_name` (string, required): Legal/display name of the company.
- `consent_tracking` (boolean): Enable the "I agree" consent banner on the hosted page (default false).
- `contact_email` (string, required): Public contact email for legal inquiries.
- `cookies` (boolean): Does it use cookies? Defaults to true for most websites.
- `data_collection` (array): Categories of personal data collected, e.g. ["email","name","usage"].
- `data_retention` (string): How long data is kept, e.g. "24 months".
- `dpo_email` (string): Data Protection Officer email, if any. Also sets hasDPO.
- `governing_law` (string): Governing law jurisdiction, e.g. "State of California, USA".
- `hosting_enabled` (boolean): Host the policy at a public policyforge.co URL (default true).
- `jurisdiction` (string, required): Target legal framework(s). One or more of: gdpr, ccpa, pipeda, lgpd, us, eu, ca, uk, au, br, global, Europe, Canada, United Kingdom, Australia, Brazil, India, Singapore, Japan, Mexico. Combine multip…
- `marketing` (boolean): Does it send marketing communications?
- `payments` (boolean): Does it process payments?
- `physical_address` (string): Company physical address.
- `security_measures` (array): Security controls, e.g. ["encryption at rest","MFA"].
- `sells_data` (boolean): Does it sell or share personal data?
- `service_description` (string): Short description of what the product or service does.
- `stack_manifest` (object): Structured summary of the stack you detected while scanning the codebase (see get_disclosure_checklist), e.g. {"analytics":["posthog"],"payments":["stripe"],"auth":["supabase"],"ai_features":["openai…
- `table_of_contents` (boolean): Add a linked table of contents to the generated document. Requires a Pro plan.
- `target_audience` (array): Audience segments, e.g. ["businesses","consumers"].
- `third_party_integrations` (array): Third-party processors, e.g. ["Stripe","Google Analytics"].
- `type` (string, required): The kind of policy to generate.
- `user_accounts` (boolean): Does the product have user accounts?
- `website_url` (string): Company website URL.

### `generate_baa` (~656 tokens)

Generate a HIPAA Business Associate Agreement

Generate a HIPAA Business Associate Agreement (BAA) between a covered entity and a vendor that handles Protected Health Information. Built from the clauses required by 45 CFR 164.504(e) and validated clause by clause before it is returned. 

Use this instead of generate_policy for BAAs — a BAA is a binding two-party contract, not a published policy, so it needs both parties' legal names and addresses and is never hosted at a public URL. 

Ask the user for the party details, effective date, and governing law: these are negotiated facts you cannot read from source code. Requires a Pro plan. The result is a draft for counsel to review, not executed legal advice.

Input parameters:

- `acknowledge_contract` (boolean, required): Must be true — a Business Associate Agreement is a binding contract, not legal advice, and should be reviewed by counsel before signing.
- `baa_breach_notification_days` (integer): Days to report a breach after discovery. Default 30. 60 is the outer limit under 45 CFR 164.410.
- `baa_business_associate_address` (string, required): Address of the business associate.
- `baa_business_associate_name` (string, required): Legal name of the business associate.
- `baa_covered_entity_address` (string, required): Address of the covered entity.
- `baa_covered_entity_name` (string, required): Legal name of the covered entity.
- `baa_direction` (string, required): covered_entity_to_vendor (you are the practice) or business_associate_to_client (you are the vendor).
- `baa_effective_date` (string, required): YYYY-MM-DD — the date the parties agree on, not today.
- `baa_electronic_phi` (boolean): Default true — triggers the HIPAA Security Rule safeguard obligations.
- `baa_governing_law_state` (string, required): Governing law state. Stricter state health privacy law is layered on top of HIPAA.
- `baa_include_indemnification` (boolean): Indemnification running from associate to covered entity.
- `baa_include_insurance` (boolean): Pair with baa_insurance_amount.
- `baa_insurance_amount` (string): Minimum cyber liability coverage, e.g. "$1,000,000 per occurrence".
- `baa_permitted_uses` (array, required): Permitted uses and disclosures per 45 CFR 164.504(e)(2)(i). Anything not listed is not permitted.
- `baa_phi_types` (array, required): Categories of PHI involved. Including "Substance use treatment records (42 CFR Part 2)" adds a Part 2 addendum.
- `baa_return_or_destroy` (string): What happens to PHI at termination.
- `baa_services_description` (string, required): The services that bring the associate into contact with PHI.
- `baa_term_end_date` (string): YYYY-MM-DD — required when baa_term_type is fixed_term.
- `baa_term_type` (string): Default tied_to_services (runs with the underlying services agreement).
- `baa_uses_subcontractors` (boolean): Default false — true adds the subcontractor flow-down clause.
- `company_name` (string, required): Legal name of the user's own company.
- `contact_email` (string, required): Contact email for the agreement.

### `list_policies` (~97 tokens)

List policies

List the policies previously created on this PolicyForge account, newest first.

Input parameters:

- `limit` (integer): Max results (1-100, default 20).
- `offset` (integer): Pagination offset.
- `sortBy` (string): Sort field (default updatedAt).
- `sortOrder` (string): Sort direction (default desc).
- `status` (string): Filter by status.
- `type` (string): Filter by policy type.

### `get_policy` (~48 tokens)

Get policy

Retrieve a single policy by ID, including its status, hosted URL, and full Markdown content.

Input parameters:

- `id` (string, required): The policy ID (UUID) returned by generate_policy or list_policies.

### `update_policy` (~220 tokens)

Update policy

Update an existing policy in place — the policy ID, hosted URL, and embed keep working, so links already published on the user's site stay valid. Use this instead of generate_policy when the business context changed (new SDK, new data flow, renamed company): fetch the current content with get_policy, revise the Markdown yourself, and submit it here. Note: there is no version history — the previous content is overwritten.

Input parameters:

- `consent_tracking` (boolean): Enable/disable the "I agree" consent banner on the hosted page.
- `content` (string): Full replacement Markdown content. Submit the COMPLETE document, not a diff.
- `effective_date` (string): New effective date, ISO format e.g. "2026-07-13".
- `hosting_enabled` (boolean): Enable/disable the public hosted page.
- `id` (string, required): The policy ID (UUID) to update.
- `status` (string): Change publication status. Only 'published' policies are served at the hosted URL.
- `title` (string): New policy title.

### `regenerate_policy` (~586 tokens)

Regenerate policy

Re-run the AI generation engine over a policy's stored business context merged with the changed fields you provide — same policy ID and hosted URL, so published links keep working. The previous content is saved as a version first (see list_policy_versions / restore_policy_version). Consumes one generation from quota, like generate_policy. Use this when the business context changed substantially (new integrations, new jurisdiction, renamed company); for small wording fixes prefer update_policy, which is free and instant.

Input parameters:

- `analytics` (boolean): Does it use analytics?
- `business_type` (string): Changed business category.
- `children_data` (boolean): Does it knowingly collect data from children?
- `company_name` (string): Changed company name.
- `contact_email` (string): Changed contact email.
- `cookies` (boolean): Does it use cookies? Defaults to true for most websites.
- `data_collection` (array): Categories of personal data collected, e.g. ["email","name","usage"].
- `data_retention` (string): How long data is kept, e.g. "24 months".
- `dpo_email` (string): Data Protection Officer email, if any. Also sets hasDPO.
- `governing_law` (string): Governing law jurisdiction, e.g. "State of California, USA".
- `id` (string, required): The policy ID (UUID) to regenerate.
- `jurisdiction` (string): Changed legal framework(s), e.g. "gdpr,ccpa".
- `marketing` (boolean): Does it send marketing communications?
- `payments` (boolean): Does it process payments?
- `physical_address` (string): Company physical address.
- `security_measures` (array): Security controls, e.g. ["encryption at rest","MFA"].
- `sells_data` (boolean): Does it sell or share personal data?
- `service_description` (string): Short description of what the product or service does.
- `stack_manifest` (object): Structured summary of the stack you detected while scanning the codebase (see get_disclosure_checklist), e.g. {"analytics":["posthog"],"payments":["stripe"],"auth":["supabase"],"ai_features":["openai…
- `table_of_contents` (boolean): Add a linked table of contents to the generated document. Requires a Pro plan.
- `target_audience` (array): Audience segments, e.g. ["businesses","consumers"].
- `third_party_integrations` (array): Third-party processors, e.g. ["Stripe","Google Analytics"].
- `user_accounts` (boolean): Does the product have user accounts?
- `website_url` (string): Company website URL.

### `audit_compliance` (~189 tokens)

Audit compliance

Compliance gap analysis: submit the stack manifest you built by scanning the codebase (see get_disclosure_checklist), optionally with a policy_id to audit against. PolicyForge compares what the code does with what the policy discloses and returns missing disclosures, overstated claims, missing policy types, and recommendations. Without a policy_id it audits the manifest alone (which policies are needed and what they must cover). Does not consume generation quota.

Input parameters:

- `manifest` (object, required): The detected-stack summary from your codebase scan, e.g. {"analytics":["posthog"],"payments":["stripe"],"ai_features":["openai"],"cookies":["session","_ph_*"],"jurisdiction_signals":["EU locales"],"u…
- `policy_id` (string): Policy (UUID) to audit the manifest against. Omit to audit the manifest alone.

### `check_policy_freshness` (~111 tokens)

Check policy freshness

Drift detection: scan the codebase now (get_disclosure_checklist), build the current stack manifest, and compare it against the manifest stored when the policy was last generated/regenerated. Reports what changed in the stack so you know whether the policy still matches the code. Runs locally on the two manifests — no AI call, no quota.

Input parameters:

- `current_manifest` (object, required): The stack manifest from your fresh codebase scan.
- `id` (string, required): The policy ID (UUID) to check.

### `list_policy_versions` (~70 tokens)

List policy versions

Version history for a policy: snapshots taken before every API update, regeneration, or restore, plus any auto-generated compliance update drafts. Use get-version content via restore_policy_version, or fetch a single version's content with this policy's versions endpoint.

Input parameters:

- `id` (string, required): The policy ID (UUID).

### `restore_policy_version` (~76 tokens)

Restore policy version

Restore a policy to a previous version from list_policy_versions. The current content is snapshotted as a new version first, so a restore is itself reversible. The hosted URL is unchanged.

Input parameters:

- `id` (string, required): The policy ID (UUID).
- `version` (integer, required): The version_number to restore (from list_policy_versions).

### `delete_policy` (~62 tokens)

Delete policy

Permanently delete a policy. The hosted URL and any embeds of it stop working immediately, and this cannot be undone. Confirm with the user before deleting anything they may have linked from their site.

Input parameters:

- `id` (string, required): The policy ID (UUID) to delete.

### `get_usage` (~45 tokens)

Get usage & quota

Check the account's subscription tier and remaining policy-generation quota. Call this before generate_policy on accounts that may be on the free tier, so you can plan instead of hitting quota errors.

### `get_disclosure_checklist` (~71 tokens)

Get disclosure checklist

Get the rubric for scanning a codebase before generating or updating policies: which SDKs, scripts, and patterns legally require disclosure, and how each finding maps to generate_policy's fields. Call this before generate_policy when working inside the user's project — policies derived from the actual code beat policies from memory.

### `get_integration_guide` (~92 tokens)

Get integration guide

Get copy-paste instructions for wiring a generated policy into the user's site: hosted link, embed snippet, and framework-specific placement. Call this after generate_policy to finish the job — a generated policy helps nobody until it's linked from the site.

Input parameters:

- `framework` (string): The site's framework, for tailored snippets (default: html).
- `id` (string, required): The policy ID (UUID) to integrate.

### `list_policy_types` (~36 tokens)

List policy types

List the supported policy types, business types, and jurisdictions accepted by generate_policy. Call this first if unsure which enum values are valid.

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/co-policyforge-mcp/policyforge-mcp#diagnostics

## Score history

- 2026-08-03: 28
- 2026-08-02: 30
- 2026-08-01: 0
- 2026-07-31: 0
- 2026-07-30: 18
- 2026-07-28: 18
- 2026-07-27: 18

## Links

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